2016-09-25 30 views
3

我可以按如下格式定義的一個事實,事實形成與天花板在序言

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

其中,X有關ceiling(sqrt(X))

我想,我可以做下面的接收所需的輸出,

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

回答

3

您可以定義:test(X, ceiling(sqrt(X))). 這意味着你必須在上述形式其實原子,所以如果你查詢:

?- test(X, ceiling(sqrt(X))). 
true. 

因爲你定義了這個條款。 但請注意,如果您查詢:

?- test(1.5, 2). 
false. 

這是因爲2是天花板(的sqrt(1.5)),但謂詞是等待像天花板上的語法返回false(開方(1.5)),而不是結果2

又如:

?- test(1.5, Y). 
Y = ceiling(sqrt(1.5)). 

?- test(X,ceiling(sqrt(1.5))). 
X = 1.5. 

還要注意:

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

總是失敗的任何輸入X(因爲沒有這樣的X等於天花板(sqrt(X))。 )和查詢測試(X)會因爲/ 2而導致實例化問題。

也許你的意思寫的是:

test(X,X1) :- X1 is ceiling(sqrt(X)). 
+0

你是對的,謝謝! –

+0

很高興幫助! – coder

2

很抱歉,但我不明白您的從句

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

你強加式(不賦值:等式)「X = ceiling(sqrt(X))」。

我覺得你的意圖是

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

這是你想要什麼?

+0

你是對的,謝謝。 –