我正在做一个练习,要求实施from_to/3
,在这里你给出了两个数字作为前两个参数,而Prolog给你列出了它们之间的所有内容作为结果。例如:会给R=[1,2,3,4,5]
。为什么这些类似的项目有不同的结果?
我写了下面的程序:
fromto(N, O, []):-
N >= O.
fromto(N, O, [N|TailResult]):-
O > N,
O1 is O-1,
fromto(N, O1, TailResult).
通过查询fromto(3,8,R)
返回五个3的列表。不好。 正确的方式来处理这将是:
from_to(N, O, []) :-
N > O.
from_to(N, O, [N|TailResult]) :-
N =< O,
N1 is N + 1,
from_to(N1, O, TailResult).
这给list 3,4,5,6,7,8
如预期。
我的问题是这是如何工作的。这些程序的不同之处仅在于我用O从上到下进行了处理,并且正确的通过将其添加到N而向上工作。但结果完全不同。 有谁知道是什么原因造成的?
而不是使用'append/3',使用[tag:dcg] -notation来制定两种方法会更有见地。 – false
@false你是对的,添加了一个dcg解决方案。 – coder