簡體   English   中英

如何將比較結果存儲在 Prolog 中並稍后使用?

[英]How do I store the result of a comparison in Prolog and use it later?

假設我想編寫一個(不可否認,但它是一個示例)謂詞來比較兩個值,並將結果作為可以引用的變量返回,如下所示:

compare(Value1, Value2, Result) :- 
    Result is Value1 > Value2.

但是在Swish 中,我收到一個錯誤:

src:2: Syntax error: Operator priority clash
compare/3: Domain error: `order' expected, found `'5''

在獲得Result之后,我將如何在另一個謂詞中使用它的值? 是否可以說:

compare(5, 2, Result),
Result.

還是我完全誤解了 Prolog 的哲學?

從表面上看,這是運算符優先級的問題:這會編譯

compare(Value1, Value2, R) :- R is (Value1 > Value2).

但它沒有運行:

?- compare(1,3,X).
ERROR: compare/3: Type error: `atom' expected, found `1' (an integer)

您將與內置函數發生沖突,請參閱比較/3。 最好避免,盡管在 SWI-Prolog 中redefine_system_predicate /1 指令可能會有所幫助。

is /2 是一個實現小 (?) 函數式子語言的謂詞,評估右側算術表達式,而> /2 實現評估兩側后的比較。 我的意思是:

..., A > B, ...

它是對還是錯,不會產生數字...

也許你想要

my_compare(A,B,C) :- A > B -> C = 1 ; A < B -> C = -1 ; C = 0.

編輯

我想我應該說明如何存儲比較值:只需實例化結果並稍后調用它。

my_compare(A,B,C) :- A > B -> C = true ; C = false.

然后

?- my_compare(1,3,R), (R -> writeln('comparison succeeded') ; writeln('comparison failed')).

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM