1

数字を印刷する操作を行うファンクター変換([3,5,1,3]、[three、five、one、three])を試していました。このように実行していると、奇妙な警告が表示されます。

35?-translate([1,2,3]、[a、b、c])。エラー:書き込み/ 2:ストリーム`a'は存在しません

domains

list1=integer*
list2=symbol*

述語

translate(list1,list2)
means(integer,symbol)

条項

translate([],[]).

translate([],_):-
    write("\nError in Input").

translate(_,[]):-
    write("\nError in Input").

translate([Head1|Tail1],[Head2|Tail2]):-
    write(Head2," = "),
    means(Head1,Name),
    write(Name,"\n"),
    translate(Tail1,Tail2).


means(0,zero).

means(1,one).

means(2,two).

means(3,three).

means(4,four).

means(5,five).

means(6,six).

means(7,seven).

means(8,eight).

means(9,nine).

正確には何が問題ですか?これは期待値です。

translate([1,2,3]、[a、b、c])

a=1つb=2つc=3つ

はい

4

1 に答える 1

3

変数は大文字にする必要があります:

translate([1,2,3],[A,B,C]).

translate([Head1|Tail1],[Head2|Tail2])句に入ると、 とa一体化しHead2、 を満たそうとします。write(Head2, "=")これはwrite(a, "=")です。

write/2最初の引数として Stream を取り、2 番目の引数をその Stream に書き込みます。

おそらく、出力が必要な場合は、次のようなものを使用したいでしょう

writef('Head2 = %w', [Head2])

(ここからフォーマットを取得しました。)

于 2011-09-14T18:56:14.033 に答える