如何在prolog的列表中定義一個二元操作,然後檢查它的屬性,如閉包,關聯,傳遞,標識等?我對prolog是新的..我不知道這是否是要問的地方,但我嘗試過,我沒有遇到任何地方。如何在prolog中定義一組數字的二元運算?
0
A
回答
1
在Prolog中定義符號(被稱爲函子)和它的參數之間謂詞,即關係。
謂詞沒有「返回值」,只是一個「真值」,取決於它是否可以被WRT評論。那麼你的問題很難回答。
當涉及到謂詞時,關聯性,傳遞性和身份幾乎沒有什麼幫助。我們希望評估的第一個也是最常見的屬性是終止,因爲Prolog控制流有點不尋常,並且很容易導致無限遞歸。
無論如何,在列表上的較簡單的二元關係是構件/ 2,保持當其第一個參數是所述第二參數(列表)的元件。
member(X, [X|_]).
member(X, [_|T]) :- member(X,T).
我看不出任何好處,評估它不是聯想性的,既不是傳遞性的(它的參數是不同類型的!)。
常見操作如intersection,union等通常需要3個參數,其中最後一個是在2個列表之間執行的操作的結果。
Prolog中的身份(即first order logic的實現)值得擔任特殊角色。事實上,用於評估身份的通常編程符號=確實執行(可能)複雜操作,稱爲統一。你可以從(succint)文檔頁面看到,它只是任意條件之間的匹配。
1
你可以做這樣的事情:
% Define sets I want to try
set7([0,1,2,3,4,5,6]).
% Define operations
% Sum modulo 7
sum7(X, Y, R) :-
R is (X+Y) mod 7.
% Normal sum
nsum(X, Y, R) :-
R is X + Y.
% A given set is closed if there is not a single case which
% indicates that it is not closed
closed(S, Operator) :-
\+ n_closed(S, Operator, _), !.
% This predicate will succeed if it finds one pair of elements
% from S which, when operated upon, will give a result R which
% is outside of the set
n_closed(S, Operator, R) :-
member(X, S),
member(Y, S),
Operation =.. [Operator, X, Y, R],
Operation,
\+ member(R, S).
當你執行它,你就會得到這些結果:
| ?- set7(S), closed(S, sum7).
(1 ms) yes
| ?- set7(S), closed(S, nsum).
no
我不相信我的閉止回閥是最佳的,但它提供了一些如何玩它的想法。
相關問題
- 1. 二元運算符應該如何在野牛中定義?
- 2. 如何在Julia中重載/重新定義二元運算符?
- 3. 如何在JavaScript中重新定義數組中的+運算符?
- 4. 在R中的二元運算符的非數字參數
- 5. 如何在python中定義一個動態的二維數組?
- 6. 二元運算
- 7. Prolog - 如何計算元素總數
- 8. 無法爲元組定義一元運算符
- 9. 定義二元指數運算符CARAT.in lambda微積分CARAT
- 10. 與二元運算符的組合?
- 11. Shiny中的二元運算符的非數字參數
- 12. 在一個包中創建一個二元運算符函數
- 13. swi prolog中的二元數獨
- 14. 如何在MathJax中定義一個新函數('運算符')?
- 15. 自定義Prolog算術函數
- 16. Java中的二元運算算法
- 17. 如何統一prolog中的數字?
- 18. 如何在prolog中使用repeat/0打印一組數字?
- 19. 如何在Ruby中覆蓋常規的二元運算符,如+, - ,*,/?
- 20. PHP - 如何計算二維數組的第二維中的元素數量?
- 21. 如何在字符串中使用運算符三元組?
- 22. 如何計算二維數組中的文本字段數?
- 23. Prolog初學者:如何統一算術比較運算符或如何獲得一組var到數值範圍
- 24. 在Prolog中定義(數學)函數
- 25. 如何定義運算符= =
- 26. 如何計算prolog中的函數?
- 27. 如何在swi-prolog中的prolog文件內運行prolog查詢?
- 28. 將元組中的二元運算符匹配到字典項目
- 29. 如何在prolog中查找二維數組中的最大數量?
- 30. 在Perl類中定義二維數組