我試圖解決Smullyan的第一個難題,用clojure.core.logic模擬一隻知更鳥,不是因爲它特別困難,而是因爲它是一個練習。這個難題表明,有一個花園有三種顏色的花朵:紅色,黃色和藍色。每種顏色至少出現一次,無論你選擇哪種花,都會出現紅色和黃色。問題:第三是必然的藍色?
的邏輯代碼的基本骨架是相當簡單:在clojure.core.logic中是否有一個合乎邏輯的for-all?
(run 5 [flowers]
(counto flowers 3)
(containso flowers [:red :yellow])
(fresh [garden]
(containso garden [:red :yellow :blue])
(containso garden flowers)
(forall [flower-selection] (...))))
counto
和containso
手動執行,做明顯的事。我對此很陌生,因此可能存在我缺少的現有庫支持。重要的一行是以forall
開頭的那一行。基本上我希望會存在,但似乎無法找到。我知道的唯一結構可以在這個地方去fresh
。但是fresh
本質上執行存在量化∃。我想要的是普遍量化∀。
我對花園不感興趣,它是可能選擇包含紅色和黃色的三朵花。我對花園感興趣,必然導致這樣的選擇。
'all'?也許 - 在這裏找到https://github.com/clojure/core.logic/wiki/Examples - (可能不是) – birdspider