从 KB [Prolog] 添加两个 int 变量
Adding two int variables from a KB [Prolog]
我是 Prolog 新手,目前正在同时学习计算逻辑,所以请原谅我在这个主题上缺乏连贯性。
我正在尝试提供一个条件,允许用户将 1、2 和 3 中的任意两个相加来求和。我想让查询接受加法的两个输入以及保存计算总和的第三个变量:
?- sum(1, 2, X)
X = 3.
在这种情况下,我不确定如何以包含此查询的方式定义知识库。我可以避免为每个数字定义单独的谓词吗?
谢谢
allowed_input(1). % your
allowed_input(2). % knowledge
allowed_input(3). % base
restricted_sum(A,B,C):-
allowed_input(A), % test user input's
allowed_input(B), % validity
C is A+B. % test the result
(根据 OP 的说明 )。测试:
2 ?- restricted_sum(1,2,3).
true.
3 ?- restricted_sum(3,2,5).
true.
4 ?- restricted_sum(3,2,15).
false.
5 ?- restricted_sum(3,4,7).
false.
你问:
Can I avoid defining separate predicates for each number?
是的,您可以改为定义
allowed_input(A):- A < 4, A > 0.
我是 Prolog 新手,目前正在同时学习计算逻辑,所以请原谅我在这个主题上缺乏连贯性。
我正在尝试提供一个条件,允许用户将 1、2 和 3 中的任意两个相加来求和。我想让查询接受加法的两个输入以及保存计算总和的第三个变量:
?- sum(1, 2, X)
X = 3.
在这种情况下,我不确定如何以包含此查询的方式定义知识库。我可以避免为每个数字定义单独的谓词吗?
谢谢
allowed_input(1). % your
allowed_input(2). % knowledge
allowed_input(3). % base
restricted_sum(A,B,C):-
allowed_input(A), % test user input's
allowed_input(B), % validity
C is A+B. % test the result
(根据 OP 的说明
2 ?- restricted_sum(1,2,3).
true.3 ?- restricted_sum(3,2,5).
true.4 ?- restricted_sum(3,2,15).
false.5 ?- restricted_sum(3,4,7).
false.
你问:
Can I avoid defining separate predicates for each number?
是的,您可以改为定义
allowed_input(A):- A < 4, A > 0.