在prolog中翻译(list1,list2)

时间:2011-09-14 18:51:19

标签: prolog visual-prolog

我正在尝试一个仿函数翻译([3,5,1,3],[三,五,一,三])来完成打印数字的操作。我这样执行时会收到一个奇怪的警告,

35? - 翻译([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).

究竟是什么问题?这是预期值。

翻译([1,2,3],[A,B,C])

a = 1 b =两个 c =三

1 个答案:

答案 0 :(得分:3)

变量必须是大写的:

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

当您输入translate([Head1|Tail1],[Head2|Tail2])子句时,a会与Head2统一,然后您尝试满足write(Head2, "=") write(a, "=")

write/2将Stream作为第一个参数,并将第二个参数写入该流。

大概你想要使用 - 如果你想要输出 - 比如

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

(我从here获得了格式。)