我想要做的是在控制台上写一些内容,如果有任何谓词是真的。例如:
write('hello') IF member('a',['a','b']).
答案 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或者经常使用write
或format
进行打印。
可以通过使用为您执行此操作的谓词来避免使用if-then-else,如上所示member/2
与memberchk/2
。
打印由顶层完成。除非您需要写入文件/流,否则我无法使用write
和format
进行有效使用。即使这样,第一次获得最终结果就更清晰,更容易,然后一次性将其写入文件。
答案 1 :(得分:0)
你可以写:
?- member('a',['a','b']) -> write('hello').
hello
true.
或定义一个子句:
write:-member('a',['a','b']) -> write('hello').
和查询:
?- write.
hello
true.