我可以定义以下形式的事实吗,
test(X, ceiling(sqrt(X))).
其中,X
与ceiling(sqrt(X))
相关。
我想,我本可以做到以下几点来接收所需的输出,
test(X, Y) :- Y is ceiling(sqrt(X)).
答案 0 :(得分:3)
您可以定义:Table "public.loan_item_assignment"
Column | Type | Modifiers | Storage | Stats target | Description
-----------------+---------+-------------------------------------------------------------------+----------+--------------+-------------
id | integer | not null default nextval('loan_item_assignment_id_seq'::regclass) | plain | |
dateselectionid | integer | | plain | |
loanitemid | integer | | plain | |
active | boolean | | plain | |
type | text | | extended | |
Indexes:
"loan_item_assignment_pkey" PRIMARY KEY, btree (id)
Foreign-key constraints:
"loan_item_assignment_dateselectionid_fkey" FOREIGN KEY (dateselectionid) REFERENCES date_selection(id)
"loan_item_assignment_loanitemid_fkey" FOREIGN KEY (loanitemid) REFERENCES loan_item(id)
这意味着你有以上形式的事实原子,所以如果你查询:
test(X, ceiling(sqrt(X))).
因为你定义了这个子句。 但请注意,如果您查询:
?- test(X, ceiling(sqrt(X))).
true.
它返回false,因为2是ceiling(sqrt(1.5))但是谓词正在等待像ceiling(sqrt(1.5))这样的语法而不是结果2。
另一个例子:
?- test(1.5, 2).
false.
和
?- test(1.5, Y).
Y = ceiling(sqrt(1.5)).
另请注意:
?- test(X,ceiling(sqrt(1.5))).
X = 1.5.
对于任何输入X,总是失败(因为没有这样的X等于天花板(sqrt(X))。)并且查询测试(X)将由于是/ 2而具有实例化问题。
也许你打算写的是:
test(X) :- X is ceiling(sqrt(X)).
答案 1 :(得分:2)
很抱歉,但我不明白你的条款
test(X) :- X is ceiling(sqrt(X)).
你强加了等式(不是赋值:等式)“X = ceiling(sqrt(X))”。
我认为你的意图是
test(X, Y) :- Y is ceiling(sqrt(X)).
这是你想要的吗?