6
A
回答
5
(cond1 ->
consequent1
; cond2 ->
consequent2
;
alternative
)
爲了記錄在案,這就是所謂的條件。
8
( If1 -> Then1
; If2 -> Then2
; ...
; otherwise
).
請注意,if-then-else僅在不同條件下通過模式匹配表示不同條件時纔有必要。所有可以通過模式匹配表達的東西都應該通過模式匹配來表達,因爲這通常會導致更一般和更高效的代碼。
1
這不是很容易找到,部分原因是(在@mat中指出)在Prolog中有一個慣用的替代方案。你可以找到here SWI-Prolog文檔,雖然太過簡單,但它是準確的。我引用一個相關點:
請注意(如果 - >然後)作爲(如果 - >然後;失敗),使構造失敗,如果條件失敗。這種不尋常的語義是ISO和所有事實上的Prolog標準的一部分。
2
只有當你想施加某種決定論時才需要 -/2。 它像一個本地剪切。但是如果你想讓你的代碼保持 一些非確定性,就沒有必要使用 - >/2。
採取以下的命令性代碼:
boolean listOfBool(Object obj) {
if (obj instanceof ConsCell) {
if (((ConsCell)ob).head() instanceof Boolean) {
return listOfBool(((ConsCell)ob).tail());
} else {
return false;
}
} else if (obj == null) {
return true;
} else {
return false;
}
}
這可以在Prolog中被編碼,而不 - >/2,如下所示:
% bool(+Bool)
% bool(-Bool)
bool(0).
bool(1).
% list_of_bool(+List)
% list_of_bool(-List)
list_of_bool(L) :-
(L = [X|Y], bool(X), list_of_bool(Y);
L = []).
的優點是現在,它可以用於檢查布爾表的列表 並生成布爾表的列表:
?- list_of_bool([0,1,0]).
Yes
?- list_of_bool([0,1,2]).
No
?- List=[_,_,_], list_of_bool(List).
List = [0, 0, 0] ;
List = [0, 0, 1] ;
List = [0, 1, 0] ;
List = [0, 1, 1] Etc..
通常,析取(;)/ 2可以分佈在多個 子句中。如果這與將統一(=)/ 2移動到頭部 相結合,則可以獲得一定的速度,因爲謂詞是 通常更適合索引。
下面是如何list_of_bool的替代製劑看起來 像通過消除(;)/ 2和(=)/ 2:
% list_of_bool2(+List)
% list_of_bool2(-List)
list_of_bool2([X|Y]) :- bool(X), list_of_bool2(Y).
list_of_bool2([]).
上述作品完全相同的(它的實際工作更好, 因爲在第一個查詢沒有選擇點離開,什麼 (;)/ 2通常檢測不到無( - >)/ 2):
?- list_of_bool2([0,1,0]).
Yes
?- list_of_bool2([0,1,2]).
No
?- List=[_,_,_], list_of_bool(List).
List = [0, 0, 0] ;
List = [0, 0, 1] ;
List = [0, 1, 0] ;
List = [0, 1, 1] Etc..
這也是Prolog的怎麼可以啓動。僅限於規則 且沒有析取(;)/ 2且沒有統一(=)/ 2。底層Horn子句中已經有 後兩個。 (;)/ 2和沒有(=)/ 2,和 你不需要一個透明:
X = X.
(A ; _) :- A.
(_ ; B) :- B.
再見
相關問題
- 1. 類似於「如果constexpr」但類定義
- 2. 自然語言處理 - 類似於ngram
- 3. CASE語句相當於如果不然,如果
- 4. jquery如果類然後懸停效果
- 5. 如果數值類似於或類似於表單x上的Vba查找值?
- 6. MySQL的自然連接顯示類似於LEFT OUTER結果JOIN
- 7. 如果然後不工作
- 8. Magento:我怎麼做,如果產品頁然後,否則,如果類別頁然後,如果cms頁然後
- 9. 如果不等於
- 10. UIScrollView,下拉效果類似於CalcBot
- 11. 斷言如果NameValueCollection中相當於
- 12. PHP雖然...如果語句不工作,似乎忽略ELSE
- 13. 在序言語言如何不重複的結果
- 14. 如果計數等於16(cc驗證),則顯示html div
- 15. SQL如果(..)然後
- 16. jQuery如果然後
- 17. 如果Container.DataItem.BooleanValue然後
- 18. JSON是一種語言,如果不是它將如何分類?
- 19. 自定義指令類似於v-如果在vuejs
- 20. 如何創建類似於此頁面的效果?
- 21. 如何實現類似於Paragon網站的滾動效果
- 22. 如何製作3D效果類似於Android網站的Marquee?
- 23. 如何數值評估類似於unet的CNN的結果?
- 24. 如何實現instagram類似於ios中的效果?
- 25. 如 - 不然,如果VBS腳本語句
- 26. 在Windows 8中創建類似於3D效果的效果8
- 27. 檢查,如果事情是在序言
- 28. Inno安裝程序如果和語言
- 29. 序言如果其他語法
- 30. 如果在序言中使用