결과를 어떻게`fresh` 변경 설명 core.logic : (1 1)
:그냥 버전 "0.8.11"<a href="https://github.com/clojure/core.logic" rel="nofollow noreferrer">core.logic</a> 함께 시작
(q/run* [q]
(q/fresh [a]
(q/membero a [2 3]))
(q/membero q [1]))
가 나는 결과를 이해하지 않습니다. , (1)
, 또는 (1 2 1 3)
:
나의 이해는 내가 그러므로 내가 좋아하는 무언가를보고 기대 한 1의 값을 취할 수 2 또는 3 그리고 q
의 값을 취할 수 신선한 또 다른 변수 a
을 만들 것입니다 ([1 2] [1 3])
또는 심지어 ({:q 1 :a 2} {:q 1 :a 3})
일 수도 있지만 실제 결과는 아닙니다.
또 다른 예 :
이(q/run* [q]
(q/fresh [a]
(q/membero a [1 2 3])
(q/membero q [3 4 5])
(q/== a q)))
;; make sense to me, returns (3)
(q/run* [q]
(q/fresh [a]
(q/membero a [1 2 3]))
(q/membero q [3 4 5]))
;; does not make sense to me, returns (3 4 3 5 4 3 5 4 5)
;; I was expecting `(3 4 5)`
사람이 여기에 무슨 일이 일어나고 있는지 설명 할 수 있을까요?