首页 > 解决方案 > Prolog中求和的解决方案

问题描述

我绝对是 prolog 的初学者。我刚刚阅读了一个基本教程,并试图自己解决一个快速问题。问题是,找到可能导致总和的数字组合。我期待这样的事情:

sum(A,B,11).

这应该导致 A 和 B 的值将它们加起来为 10。

我最初的代码是这样的:

sum(A,B,C):-
    C is A + B.

但我没有得到任何结果。我得到以下。

ERROR: Arguments are not sufficiently instantiated
ERROR: In:
ERROR:    [9] 11 is _3302+_3304
ERROR:    [7] <user>
ERROR: 
ERROR: Note: some frames are missing due to last-call optimization.
ERROR: Re-run your program in debug mode (:- debug.) to get more detail.

我对 Prolog 的理解缺少什么?

标签: prolog

解决方案


标准is/2谓词需要第二个参数的可评估算术表达式。因此,在您的情况下,您将需要为 and 生成可能的值AB以便A + B可以计算。为了使其实用,您需要限制可能值的范围。例如:

?- between(1,7,A), between(1,7,B), sum(A,B,11).
A = 4,
B = 7 ;
A = 5,
B = 6 ;
A = 6,
B = 5 ;
A = 7,
B = 4 ;
false.

随着您对 Prolog 的学习取得进展,您最终可能会对学习约束求解器感兴趣。


推荐阅读