。如何在Prolog的write谓词中写单引号(')?

时间:2010-12-04 13:51:19

标签: prolog quote

我想在程序的开头添加简短的信息,我就像这样

message :-
    nl,nl,
    write('  To start type  '), nl,
    write(' ?- solve(Input1,Input2,Output3) '), nl.
:- message.

这很好......但我需要写('? - solve('Input1','Input2',Output3)'),nl 所以当我运行程序时,它应该打印 开始输入 ? - 解决(' Input1 '' Input2 ',输出3)

提前感谢:)

1 个答案:

答案 0 :(得分:5)

反斜杠退出报价。

例如,要输出单个单引号:

?- write('\'').
'
true.

作为一般规则,您当然应该完全避免副作用 。一个好的解决方案是使用DCG 描述输出。这使得它适用于测试用例,如果输出仅出现在终端上,则难以写入。

write/1特别少用。如果您确实需要输出内容,请使用 format/2 。如果你知道DOS,这听起来很可怕,但事实并非如此。

format/2的一个重要优点是它可以让您方便地使用灵活参数对静态文本进行网格化,例如:

?- member(X, [friend,foe,love]),
   format("hello my '~q'!\n", [X]),
   false.

产量:

hello my 'friend'!
hello my 'foe'!
hello my 'love'!

请注意,在这种情况下甚至不会出现单引号的问题。使用"

可以再次解决\的类似问题
?- format("a \"test\"", []).
a "test"