[英]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.