Перевести (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])
(Я получил форматирование отсюда.)