模拟if语句

时间:2016-10-13 19:10:24

标签: prolog

我想要做的是在控制台上写一些内容,如果有任何谓词是真的。例如:

write('hello') IF member('a',['a','b']).

2 个答案:

答案 0 :(得分:2)

如果a, b为真,且a为真,则联合b为真(成功)。订单很重要:

  

写"你好"并检查x是否在[a,b]

?- write(hello), member(x, [a,b]).
hello
false.
  

检查x是否在[a,b]中,如果是,请写下#34;你好"

?- member(x, [a,b]), write(hello).
false.
  

检查a是否在[a,b]中,如果是,请写下#34;你好"

?- member(a, [a,b]), write(hello).
hello % press Enter
true .

if-then-else结构Condition -> Then ; Else略有不同,仅基于您的问题,我不知道您是否真的需要它。例如,要避免这些示例中的额外选择点,您可能需要编写:

?- memberchk(a, [a,b]), write(hello).
hello
true.

当然,您实际上可能需要查看每个成员。例如:

  

仅打印字符列表中的大写字母

?- member(X, [a, b, 'C', 'D', e, f, 'G']), char_type(X, upper).
X = 'C' ;
X = 'D' ;
X = 'G'.

你应该仔细看看。没有if-then-else,也没有打印。我差点说你正试图解决一个没问题的问题。一般来说,您不应该使用if-then-else或者经常使用writeformat进行打印。

可以通过使用为您执行此操作的谓词来避免使用if-then-else,如上所示member/2memberchk/2

打印由顶层完成。除非您需要写入文件/流,否则我无法使用writeformat进行有效使用。即使这样,第一次获得最终结果就更清晰,更容易,然后一次性将其写入文件。

答案 1 :(得分:0)

你可以写:

 ?- member('a',['a','b']) -> write('hello').
 hello
 true.

或定义一个子句:

write:-member('a',['a','b']) -> write('hello').

和查询:

?- write.
hello
true.