在prolog中使用abs()构建一个列表



我正试图为以下任务编写一个谓词。

写一个谓词距离(Bs,B,Ds(,其中Bs和Ds是变量列表,这样Ds的第i个元素是变量B和Bs 的第I个元素之间的绝对差

我知道这是不正确的,但我认为我大致应该尝试做

distances([],_,[]).
distances([H|T],B,A) :-abs(H - B,A),distances(T,B,A) 

我需要将abs谓词的结果返回到距离回避调用中吗?

我可以使用abs为列表中的每个条目计算正确的值,但我如何将这些信息放入列表中,然后返回?

谓词不返回。谓词成功、失败、(陷入无限循环或引发错误(。一种是使用统一来提供结果。事实上,这里您的第三个参数Ds可能会提供结果。

因此,我们可以将绝对值D统一到第三个参数的列表的头部,并在尾部Ds:上递归

distances([], _, []).
distances([H|T], B,[D|Ds]) :-
abs(H - B,D),
distances(T, B,Ds).

最新更新