Перевести (list1, list2) в пролог

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

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

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

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

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

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

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

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

Другие вопросы по тегам