Проблема при выполнении перевода списка чисел в слова, такие как [1,2,3] в [один, два, три]

#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.pl

2. Спасибо @ 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. Убедитесь, что вы изучили все предупреждения. Предупреждения часто являются подсказками к ошибкам и их не следует игнорировать.