如何在Prolog中将数字列表转换为单词列表?

时间:2019-02-22 19:04:40

标签: prolog gnu-prolog

我正在尝试编写一个Prolog程序,以便给定像[1, 2, 3]这样的数字列表,它将把它们转换成代表那些数字['one', 'two', 'three']的单词列表。

到目前为止,我的代码:

totext(0, 'zero').
totext(1, 'one').
totext(2, 'two').
totext(3, 'three').
totext(4, 'four').
totext(5, 'five').
totext(6, 'six').
totext(7, 'seven').
totext(8, 'eight').
totext(9, 'nine').

translate([], []).
translate([Head|Rest], [TranslatedHead|TranslatedRest]) :-
   totext(Head, TranslatedHead),
   translate(Rest, TranslatedRest).

当我加载gprolog并查阅文件时,如果这样做:

translate([], X).

我正确地得到:

X = []
yes

但是当我这样做

translate([1,2], X).

我得到:

uncaught exception: error(existence_error(procedure,totext/0),translate/0)

我对Prolog非常陌生(这是我的第一个Prolog程序),我不知道这里出了什么问题。有任何想法吗?谢谢。

1 个答案:

答案 0 :(得分:3)

您的代码已更正,但您的GNU Prolog构建已损坏。从源代码重新编译GNU Prolog应该可以解决它。损坏的GNU Prolog构建的常见症状是谓词存在错误,在谓词中始终被报告为零度,而被调用的代码中通常不存在谓词。

P.S。使用Ubuntu时,通常会发生GNU Prolog安装中断的情况。您能确认也是您的情况吗?