使用单个子句计算列表中任意三个成员的总和是否等于给定值



除了下面列出的函数之外,我们不应该使用任何函数:

  • 必须定义单个子句(不再定义(。
  • +
  • ,
  • ;
  • .
  • !
  • :-
  • is
  • 列表
  • 列表类型的头尾语法
  • 变量

例如sumlists([1,2,3,5,7],11)则程序执行应打印TRUE。因为 1+3+7(任意三个(=11(给定 N 值(。

理想情况下,我们要么得到一个元素,要么不得到,因为我们沿着输入列表前进;我们要么在达到所需的总和,要么超过它,要么在列表用尽时停止。

但是我们在这里只能有一个子句一个谓词,并且只使用某些原语,所以我们偷偷地将+符号化地用于收集求和信息,并作为算术运算本身:

sumlists(L, N) :-
N = X+A+B+C, X is A+B+C, !
;  L = [H|T], sumlists(T, N+H)
;  L = [H|T], sumlists(T, N).

相关内容

最新更新