我试图解决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