2017-02-05 42 views
1

我正在Prolog基本项目上工作。我想写一个函数,根据输入列表返回一个数字。我也想确保当输入列表为空时,结果是错误的。 函数应该是这样的 parseList(List,N)其中N是一个数字。我想知道当我们尝试时返回False的方式基本情况下返回false条件序言

parseList([], N). 

其中N是任意数字。

我试着这样做的基本情况

parseList([], False). 

然而,这似乎并没有工作。

任何人都可以帮助我吗?谢谢!

+0

您不要在Prolog中“返回”false值。如果谓词不能用给定的参数成功,则谓词失败(结果为“false”)。因此,缺少支持空列表的谓词子句将自动失败。把'parseList([],N)'离开你的代码。 – lurker

+0

但是,不应该有支持谓词的基本情况,.i.e。当列表不是空的时谓词的停止点? – therealdev

+0

您的基本案例不需要处理空白列表。它可以处理一个元素的列表,例如*,'parseList([X],N): - ...'那么递归的case可以处理2个或更多的元素,'parseList([X,Y | T], N): - ...'。 – lurker

回答

1

正如Lurker在他的评论中所说的,在这个例子中,忽略空列表条件并处理一个元素的列表将导致空列表失败。然而,在更一般的情况下,如果你想声明一个失败的规则,只需包含false,因为那永远不会是真的,或者fail这样做。例如:

parseList([],_) :- false. 

或(废弃)

parseList([],_) :- fail. 

(其中_用于表示不重要的变量,否则单例可变警告将被触发)。

+0

'false/0'是ISO标准的更好选择和最近的补充:它与'true/0'相比更加明显。 'fail/0'与'succeed/0'相反,根本不可用。 – mat

相关问题