我想添加到结果列表 N 到 0 位。
示例查询
?- add(5,R).
应该返回答案:
R = [5,4,3,2,1,0].
我已经尝试了以下代码,但它没有用。
add(0, 0).
add(N, [R]) :-
N1 is N-1,
add(N1, [R|N]).
最佳答案
你太接近了!
add(0, [0]).
add(N, [N|R]) :-
N > 0,
N1 is N-1,
add(N1, R).
那么,这里有什么不同?
add(0, [0])
有[0]
而不是0
因为你正在构建一个列表,不是整数;否则你会得到相当尴尬的[5,4,3,2,1|0]
结果。N > 0
作为守卫,以确保一旦达到基本情况,我们就不会永远循环遍历负数。这项工作是在
add/2
的第二个子句的头部而不是它的主体中完成的。也就是说,我们的模式是add(N, [N|R])
而不是add(N, [R])
。这是因为该术语将 N 添加到列表的头部,而不是在重复出现之前添加它。同样,您在
[R|N]
中有一个简单的反转;这会以倒退的方式构建列表。
总而言之,我认为你们非常亲密。在提示符下多做一些试验可能就足以修复它。你试过使用 trace/0
了吗?
关于list - Prolog 添加 N 到 0 到列表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33925916/