gpt4 book ai didi

prolog - 删除Prolog中的倍数

转载 作者:行者123 更新时间:2023-12-02 09:16:47 38 4
gpt4 key购买 nike

我正在尝试进行此练习,我应该构建一个序言程序,当给定一个数字和一个列表时,该序言程序将返回一个不包含数字倍数的列表。现在我做了这个:

rm([],[]).  
rm(N, [Head|Tail], Result):-
Head mod N =:= 0,
rm(N, Tail, Result).
rm(N, [Head|Tail], [Head|Result]):-
Head mod N =\= 0,
rm(N, Tail, Result).

它行不通,我也不知道为什么。
我希望有人可以向我解释为什么这行不通。
谢谢

最佳答案

简短答案:第一个子句只有两个参数。

您对removeMultiples/3进行递归调用:每次调用相同的谓词removeMultiples/3。这样,您可以枚举两个列表。但是最终您将到达列表的末尾。

但是,第一个子句是关于removeMultiples/2谓词的。因此,您需要添加第三个参数:

removeMultiples(_,[],[]).  % three arguments
removeMultiples(N, [Head|Tail], Result):-
Head mod N =:= 0,
removeMultiples(N, Tail, Result).
removeMultiples(N, [Head|Tail], [Head|Result]):-
Head mod N =\= 0,
removeMultiples(N, Tail, Result).

现在它产生:
?- removeMultiples(3, [1,2,3,4,6,7,8,9,15,3,1], Result).
Result = [1, 2, 4, 7, 8, 1] ;
false.

关于prolog - 删除Prolog中的倍数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46380831/

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