перевести (list1, list2) в пролог - PullRequest
1 голос
/ 14 сентября 2011

Я пробовал функторный перевод ([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], [а, б, в])

а = один б = два с = три

Да

1 Ответ

3 голосов
/ 14 сентября 2011

Переменные должны быть в верхнем регистре:

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

Когда вы вводите предложение translate([Head1|Tail1],[Head2|Tail2]), a объединяется с Head2, а затем вы пытаетесь удовлетворить write(Head2, "="), то есть write(a, "=").

write/2 принимает в качестве первого аргумента поток и записывает второй аргумент в этот поток.

Предположительно, вы хотите использовать - если вам вообще нужен вывод - что-то вроде

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

(Я получил форматирование от здесь .)

...