【发布时间】:2015-11-25 15:39:27
【问题描述】:
我有一个学校作业,最近开始学习 Prolog。
这是练习(非常简单):
在 Prolog 中编写一个程序来查找给定列表的长度。例如,
length([a, b, c, d, e]).应该打印 5
我真的不知道如何为我创建一个 length/1 谓词。这是我的代码:
length([],0).
length([_|T],N) :- length(T,X), N is X+1.
现在,我问我的老师如何将其转换为 length/1 谓词,他告诉我使用 write/1 谓词。
我查找了write/1 谓词,但我不明白这将如何帮助我编写length/1 谓词。
任何提示/技巧可以做到这一点?
需要明确的是,这是家庭作业。
【问题讨论】:
-
没有诀窍。
length/1谓词远不如length/2谓词有用。通常,您会这样做,length([1,2,3], N), write(N), nl.如果您愿意,您可以轻松地将其转换为length/1谓词。他们似乎在 Prolog 课程中教授的原则有点令人不安。他们似乎将 Prolog 作为一种迟钝且有限的命令式语言来教授,而不是简单而强大的关系语言。 -
好评论,+1!我以前也是这么看的,直到@repeat 向我指出了一件有趣的事情:如果你看看那些教和使用 Prolog 的人,你会发现他们很开心,即使他们只使用了一小部分语言的实际能力。从那以后,我对这件事采取了稍微不同的解释:即使他们失去了这么多,但他们已经为自己所拥有的很少而感到非常高兴!将来,他们可能会更喜欢越来越广为人知的更普遍的特征(约束等)!
标签: list prolog prolog-toplevel