对于Prolog,我还是比较新的,并且涉及列表的练习一直存在困难:给定任意数据列表,将列表分成两个列表 - 一个列表包含整数值,一个包含实数值,然后忽略原始列表中的任何其他项目。按类型将列表分类为两个单独的列表
我写到目前为止以下:
isInteger(I, IntegerListHead):-
integer(I),
IntegerListHead is I.
isFloat(F, FloatListHead):-
float(F),
FloatListHead is F.
splitList([]).
splitList([H|T], [IntHead|IntList],[FloatHead|FloatList]):-
isInteger(H, IntHead),
isFloat(H, FloatHead),
splitList(T, IntList, FloatList).
不过,我不知道为什么我得到一些错误:
?- splitList([1, 2.5, 6, 7.0, -1, -0.5], I, F).
ERROR: toplevel: Undefined procedure: splitList/3 (DWIM could not correct goal)
通常嫌疑犯这个错误似乎并没有是这样,但也许我错过了什么?
编辑:当我重新加载该文件,并运行它第二次我有以下几点:
?- splitList([1, 2.5, 6, 7.0, -1, -0.5], I, F).
false.
您的'splitList'谓词对于基本情况子句有一个参数,但递归子句有3个参数。这是行不通的。你也需要3的基本情况,它需要为其他两个提供相应的值(在这种情况下,不适合'[]'?)。你的错误看起来像Prolog没有定义三参数谓词,所以你不能加载你正确显示的代码。 – lurker
你的错误信息确实包含一个错字:你正在调用'splitList/1',这是一个简单的事实,但是你会得到一个关于'splitList/3'的错误。这不可能。 – false
啊,道歉 - 我复制了不正确的行。让我快速编辑它。 –