【发布时间】:2011-07-26 04:21:24
【问题描述】:
我需要一些帮助,在 Prolog 中编写一个谓词,给定一个数字作为输入,返回一个列表列表,其中的数字相加。
让我们调用谓词 addUpList/2,它应该是这样工作的:
?- addUpList(3,P).
P = [[1,2], [2,1], [1,1,1]]. % expected result
我很难弄清楚这一点,我开始认为这是不可能的。有任何想法吗?提前致谢。
【问题讨论】:
-
不是不可能的,但你不会想为非常大的整数运行这个东西!阅读stackoverflow.com/questions/4632322/…可能会获得一些见解。
-
嗯,我明白了......但这些答案取决于将一组数字作为输入传递给他们。就我而言,我需要生成一组数字......我不知道我是否清楚。
-
不,你很清楚;另一个问题解决了给定加数的子集和问题,而您想要所有组合。它相似但不一样。您的问题将生成非常庞大的列表。只是出于好奇,这是作业吗?你想对结果列表的元素做什么。您知道给定总和的结果列表有多大吗?
-
我知道它可以生成巨大的列表,但我只需要在 [1 ... 10] 之间加起来的加数(使最大可能的列表 [1,1,1,1,1, 1,1,1,1,1])。整个列表将传递给另一个谓词,以构建 R-ary 树。坦率地说,是的,这是家庭作业,我已经被困在试图弄清楚至少一个星期了。
-
只是想评论一下,这与枚举所有可能的整数分区有关,有一些已知的方法可以做到这一点。包含相关标签会很有帮助。
标签: prolog