2014-12-04 55 views
0

我想在prolog中执行sumList函数,它采用 输入:sumList([1,[2,3],[4],5],X)。并返回X = 15。prolog总结列表使用原子

我明白如何总结一个简单的列表和列表的列表(即[1,2,3,4,5] & [[1,2,3],[4,5]],但我是因为我没有正确地处理多个内部列表(因为我还不知道如何,我以前没有遇到过这个问题),我被告知我必须以某种方式使用原子或原子大学,但我没有看到清楚如何完成这个例子。 任何sml代码我可以翻译或prolog代码,可以帮助我总结列表[1,[2,3],[4],5]将大大appericated。 谢谢!

回答

0

在SWI Prolog中(只是不确定ANSI),atomic(X)谓词可以告诉你X是列表还是数字(在你的情况下)。它可以用来通过递归调用本身当遇到一个列表,或者一个简单的数字元素只是添加到一笔写sum断言:

sum([], 0). 
sum([H|T], S) :- 
    atomic(H), 
    sum(T, S1), 
    S is H + S1. 
sum([H|T], S) :- 
    sum(H, S1), 
    sum(T, S2), 
    S is S1 + S2. 
+0

非常感谢!这令人惊奇,我一直在努力寻找原子或原子的一些体面的例子(更多的是它们的一般定义),下午一点半。是的,我在SMI prolog工作。 – Laura 2014-12-04 22:38:36

+0

@Laura一个upvote和'接受'就足够了:) – 2014-12-04 22:41:15

+0

我没有声望来upvote @Eugene,但我确实接受了答案,我真的很感谢在理解原子和例子方面的帮助。 – Laura 2014-12-08 18:33:26