繁体   English   中英

Prolog以递归方式计算列表中的数字

[英]Prolog recursively count numbers in a list

我需要一个程序来计算列表中的所有数字,无论它们是多么深刻的嵌套。 我能够在不在另一个列表中的情况下对数字进行计数,但是通过深层嵌套元素进行递归并不成功。 到目前为止我有这个:

count([],0).
count([H|Tail], N) :-
    count(Tail, N1),
    (  number(H)
    ->N is N1 + 1
    ;   is_list(H)
    -> count(H,N)  
    ;   N = N1
    ).

所以,如果我要调用count([a,1,[2,b],3],N) ,输出应为N=3 ; 但是,我只得到N=2 有人可以帮我加我的第二次案例测试吗? 此处的所有可用解决方案都不适用于深层嵌套的数字元素。

谢谢!

您的代码对于is_list(H)分支是不正确的:在这种情况下,您忽略N1的值,这是不正确的,您希望NN1H上的计数之和。

完整代码:

:- use_module(library(clpfd)).

count([], 0).
count([H|T], N) :-
    count(T, N1),
    (   number(H) ->
        N #= N1 + 1
    ;   is_list(H) ->
        N #= N1 + N2,
        count(H, N2)
    ;   N1 = N
    ).

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM