除了下面列出的函数之外,我们不应该使用任何函数:
- 必须定义单个子句(不再定义(。
+
,
;
.
!
:-
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).