我是Prolog的初学者。如果语句内部的值为true,我是否可以继续执行谓词?这是我的代码片段:
%Ylist contains: [1,2,3]
validatemove(_,[],_). % goal if Ylist is empty
validatemove(X, [Y1|Ylist], Node) :-
X \= 0, % if X is 0, return false
Y1 \= 0, % if Y1 is 0, do not execute rest of code,
% call validatemove(X, Ylist, Node) again
Some predicates here,
....,
validatemove(X, Ylist, Newnode).
我正在努力想出这样的事情。无论哪种方式,我想迭代Ylist
中给出的所有值。我该怎么办?
答案 0 :(得分:1)
您似乎正在寻找 if-then-else 控件构造。也许是这样的:
%Ylist contains: [1,2,3]
validate_move([], _, _). % goal if Ylist is empty
validate_move([Y| Ys], X, Node) :-
X =\= 0,
% if X is 0, return false
( Y =:= 0 ->
validate_move(Ys, X, Node)
; % Some predicates here,
validate_move(Ys, X, NewNode)
).
请注意,假设在调用谓词时已知列表,最好将其移动到第一个参数以利用Prolog第一个参数索引(由大多数系统实现)。您似乎在比较整数,因此请使用算术比较谓词而不是统一谓词。另外,使用下划线来分隔原子中的单词并且通常仅将CamelCase用于变量是很好的Prolog编程风格。