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

Fil*_*lip 4 prolog quote

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

message :-
    nl,nl,
    write('  To start type  '), nl,
    write(' ?- solve(Input1,Input2,Output3) '), nl.
:- message.
Run Code Online (Sandbox Code Playgroud)

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

提前致谢 :)

mat*_*mat 6

反斜杠逃脱报价.

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

?- write('\'').
'
true.
Run Code Online (Sandbox Code Playgroud)

作为一般规则,您当然应该完全避免副作用 .一个好的解决方案是使用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"