if-statement - Prolog,带有条件条款的建筑 list

标签 if-statement prolog conditional

我需要使用序言(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/

相关文章:

c# - 调用 string 或 in within within if 或 try from outside

prolog - prolog 写入错误

mysql - 从mysql获取数据并在prolog中进行谓词

python - 根据python中的条件区分两列 Pandas 数据框

c++ - : if (number)是什么意思

javascript - 为什么我不能在 if 语句中添加 var

python - 我的 if 语句不断为空列表返回 'None'

prolog - 我如何使用这个 Prolog 谓词来接收结果?无法弄清楚输入

MySQL 如果存在则插入或做其他事情

r - 根据 R 中的条件创建重复行