gpt4 book ai didi

list - 序言分配

转载 作者:行者123 更新时间:2023-12-04 23:07:09 24 4
gpt4 key购买 nike

这是我的一项作业的问题:

Write repCount(L, X, N) which is true when N is the number of occurrences of X in list L.



这是我尝试递归解决问题的代码:
repCount([], X, N) :-
N is 0.
repCount([H|T], X, N) :-
count([H|T], X, N).

count([], X, 0).
count([H|T], X, N) :-
count(T, X, N1),
X =:= H,
N is N1 + 1.

当我提供一个充满相同数字的列表时,它会起作用:
?- repCount([2,2,2], 2, N).
N = 3.

但是,如果我提供一个列表,其中至少有一个不同的值:
?- repCount([2,2,22], 2, N).
false.

它返回 false .我无法弄清楚为什么会发生这种情况或如何将其更改为“跳过”不匹配的值,而不是将整个事情声明为 false。任何输入表示赞赏。

最佳答案

count([H|T], X, N):- count(T, X, N1), X=:=H, N is N1 + 1.

在这里你声明如果 X 是 H,N 应该是 N1+1;但是你没有定义如果 X 不是 H 会发生什么(基本上缺少 else 子句)
这应该有效:
count([H|T], X, N):- 
count(T, X, N1),
(X=:=H->
N is N1 + 1
; N is N1).

另一种方式是:
count([H|T], X, N):- count(T, X, N1), X=:=H, N is N1 + 1.

count([H|T], X, N):- X=\=H, count(T, X, N1), N is N1.

但这是低效的,因为如果 X 不是 H,count(T,X,N1) 将被调用两次。我们可以通过在子句的头部进行检查来解决这个问题:
count([H|T], H, N):- count(T, X, N1), N is N1 + 1.

count([H|T], X, N):- count(T, X, N1), N is N1.

或者干脆:
count([H|T], H, N):- count(T, X, N1),N 为 N1 + 1。
count([H|T], X, N1):- X=\=H, count(T, X, N1).

关于list - 序言分配,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9401464/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com