【发布时间】:2019-02-22 19:04:39
【问题描述】:
我正在尝试编写一个 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 程序),我不知道这里出了什么问题。有任何想法吗?谢谢。
【问题讨论】:
-
当我将您的代码加载到
gprolog并执行translate([1,2], X).时,我得到X = [one, two]。我敢打赌你在translate后面加了一个空格。请注意错误中的translate/0,这意味着translate的“无参数”。你输入translate ([1,,2], X).了吗?那是行不通的。另外,您可以使用maplist进行这种列表处理:maplist(totext, Numbers, Names)。试试maplist(totext, [1,2,3], Names)。 -
这是完整的程序吗?好像少了点什么?
-
@WillemVanOnsem 什么都没有。它按原样工作。
-
这是完整的程序,我把它保存为“test.pl”。我打开 gprolog 然后做咨询('test.pl')。试试看,还是不行。
-
@lurker:我的意思是,由于我们没有收到错误,因此两者看起来不同步:产生错误的程序和此处共享的程序。
标签: prolog gnu-prolog