【发布时间】:2017-08-03 17:43:43
【问题描述】:
我需要使用dcg 在Prolog 中编写一个谓词CleanList/3,它解析一个列表并返回一个具有相同数字但所有不是数字的元素都被删除的新列表。
举个例子:
?- cleanList([1,2,d,67,3.2,'CSI2120',foo,5],LL).
LL = [1, 2, 67, 3.2, 5].
我编写了基本案例并努力使用递归案例来实现 DCG。有人可以帮我解决这个问题吗?
基本情况:
cleanList(L,LL) :- cleanList(LL,L,[]),!.
【问题讨论】:
-
您的基本案例不是 DCG,也不是基本案例。基本情况不是递归的,但应该给出基本的、最低级别的关系。您的递归调用使用 3 个参数作为谓词,该谓词只需要 2 个。
-
只有当
X是一个数字时,您才能使用number(X)成功这一事实。