#prolog
#пролог
Вопрос:
Всем привет, я пытаюсь перевести числа в список слов. Моя логика кажется правильной, но с выводом что-то не так. Я использую swi-prolog на своем Mac.
Поэтому, когда я ввожу translate ([1,2,3], X). это дает false.
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([],[]).
translate([Head|Tail],[Head1|Tail1]):-
means(Head,Head1),
translate(Tail,Tail1).
Ожидаемый:
?- translate([1,2,3],X).
X = [one,two,three].
Но получил:
?- translate([1,2,3],X).
false.
Комментарии:
1. У вас опечатка в строке
means(6.six).
точка вместо запятой. Может ли это быть связано? С этим исправлением ваш код действительно работает в SWI Prolog здесь: swish.swi-prolog.org/p/ifypLKpL.pl2. Спасибо @ TessellatinHeckler, это моя ошибка
3. Вам также следует подумать о том, чтобы просто использовать
maplist/3
:maplist(means, [1,2,3], X)
то же самое, что и вашtranslate/2
.4. Всякий раз, когда вы сталкиваетесь с такой проблемой, обобщайте свой запрос . Как
translate([X,Y,Z], Ts)
или дажеtranslate(Xs, Ts)
5. SWI Prolog выдал бы вам, по крайней мере, предупреждение о несмежных фактах, поскольку
means(6.six)
рассматривает SWI Prolog как факт с одним аргументом, в то время как остальные являются аргументом 2. Убедитесь, что вы изучили все предупреждения. Предупреждения часто являются подсказками к ошибкам и их не следует игнорировать.