我需要使用序言(SWI flavor )来完成此作业,并且无法理解某些事情。
例如,如果我想遍历一个列表并将其元素添加到另一个列表中,但是只有在满足特定条件的情况下,我该如何处理呢?我可以全部添加,也可以不添加,但是如果我添加检查此条件的子句,则整个递归结果都为“false”。我知道这是为什么,但不知道如何解决。基本上我想要的是:
goal(Stuff) :- do_something(X),
only_do_this_if_something(Y),
always_do_this(Z).
当前,如果
only_do_this_if_something(Y)
失败,由于整个目标变为假,因此always_do_this(Z)
也不会发生。
最佳答案
您可以使用if结构:
<condition> -> (do_something) ; (do_something else)
在这种情况下:
goal(Stuff):-
do_something(X),
if_something(Y)-> do_this(Y) ; true,
always_do_this(Z).
或者您只需编写两个子句,例如:
goal(Stuff):-
do_something(X),
conditional_stuff(Y),
always_do_this(Z).
conditional_stuff(Y):-
condition(Y),
do_this(Y).
conditional_stuff(_).
关于if-statement - Prolog,带有条件条款的建筑 list ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6023717/