我正试图为以下任务编写一个谓词。
写一个谓词距离(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).