编写一个谓词
above(L, N)
,它将生成(在回溯时)每个大于给定整数的整数,L
. 例如,目标above(3, N)
应该生成为解决方案N = 4; N = 5; N = 6; ...
,依此类推,以便回溯。
如上。
“在回溯中生成解决方案”的一般策略也会很棒。
编写一个谓词
above(L, N)
,它将生成(在回溯时)每个大于给定整数的整数,L
. 例如,目标above(3, N)
应该生成为解决方案N = 4; N = 5; N = 6; ...
,依此类推,以便回溯。
如上。
“在回溯中生成解决方案”的一般策略也会很棒。
length(_,N), N > 3.
length(_,I), N is I + 4.
这些不是最有效的版本,但它们不需要辅助定义。
length([_,_,_,_|_],N).
可能会更快,但有点模糊。
You would need a procedure with two clauses. The first one would be the base case which for the input number L unifies the output number N with L+1. The second clause would be the recursive step, which just increments L and calls recusively above/2.
above(L, NL):-
NL is L+1.
above(L, NL):-
ML is L+1,
above(ML, NL).