4

プログラムの最初に短い情報を追加したいのですが、このようになります

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

そしてこれは問題ありません...しかし私はwrite('?-solve( ' Input1 '、' Input2'、Output3)')、nlが必要なので、プログラムを実行すると出力する必要があります。、'入力2 '、出力3)

前もって感謝します :)

4

1 に答える 1

6

引用符をバックスラッシュでエスケープします。

たとえば、単一引用符を出力するには、次のようにします。

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

原則として、もちろん副作用を 完全に回避する必要があります。良い解決策は、DCGを使用して出力を記述することです。これにより、出力が端末にのみ表示される場合に書き込むのが難しいテストケースに対応できるようになります。

write/1特にめったに使用されません。本当に何かを出力する必要がある場合は、を使用してformat/2ください。DOSを知っているなら、これは怖いように聞こえますが、実際にはそうではありません。

の重要な利点format/2は、静的テキストを柔軟な引数で便利にメッシュ化できることです。次に例を示します。

?-member(X、[friend、foe、love])、
    format( "hello my'〜q'!\ n"、[X])、
   false。

降伏:

こんにちは、友よ'!
こんにちは私の「敵」!
やあ、いとしい人'!

この場合、一重引用符の問題は発生しなかったことに注意してください。の類似の問題は、次"を使用して再度解決できます\

?-format( "a \" test \ ""、[])。
テスト"
于 2010-12-04T16:53:19.310 に答える