-1

编写一个谓词above(L, N),它将生成(在回溯时)每个大于给定整数的整数,L. 例如,目标above(3, N)应该生成为解决方案N = 4; N = 5; N = 6; ...,依此类推,以便回溯。

如上。

“在回溯中生成解决方案”的一般策略也会很棒。

4

2 回答 2

3
   length(_,N), N > 3.

   length(_,I), N is I + 4.

这些不是最有效的版本,但它们不需要辅助定义。

   length([_,_,_,_|_],N).

可能会更快,但有点模糊。

于 2012-04-26T17:27:31.390 回答
1

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).
于 2012-04-26T15:42:23.793 回答