事实形成与prolog的天花板

时间:2016-09-25 16:44:04

标签: prolog

我可以定义以下形式的事实吗,

test(X, ceiling(sqrt(X))). 

其中,Xceiling(sqrt(X))相关。

我想,我本可以做到以下几点来接收所需的输出,

test(X, Y) :- Y is ceiling(sqrt(X)).

2 个答案:

答案 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)).

这是你想要的吗?