例如,如果我有一个列表[1,1,2,3,5,1]
,我想计算这个列表中 1 的数量,我该怎么做?
我写了类似的东西:
count([], 0).
count([H|T], N) :-
count(T, X),
( H =:= 1
-> N is X+1
; N is X
),
N > 0.
Run Code Online (Sandbox Code Playgroud)
在这个递归中,我想做如果 Head 等于 1,则计数 + 1,如果 Head 不为 1,则计数保持不变。但是,如果列表中的内容不是 1,它会返回 false。我知道问题在于,只要元素不满足 if 语句,它就会失败;它永远无法到达 else 语句。我该如何解决?请帮忙!!!!
尝试这个:
count([],0).
count([1|T],N) :- count(T,N1), N is N1 + 1.
count([X|T],N) :- X \= 1, count(T,N).
Run Code Online (Sandbox Code Playgroud)