Tôi đang cố gắng lấy dữ liệu ra khỏi bản đồ bằng cách sử dụng Clojure core.logic. Mã này không như tôi muốn nó:Trích xuất các yếu tố của bản đồ từ Clojure core.logic
(run 10 [q]
(fresh [?id ?type ?name]
(membero ?type [:t2 :t1])
(== q [?id ?name])
(membero {:id ?id :type ?type :name ?name}
[
{:id 1 :type :t1 :name "one"}
{:id 2 :type :t2 :name "two"}
])))
=> ([2 "two"] [1 "one"])
Tuy nhiên nếu tôi thêm một số yếu tố khác để bản đồ sau đó nó không phù hợp:
(run 10 [q]
(fresh [?id ?type ?name]
(membero ?type [:t2 :t1])
(== q [?id ?name])
(membero {:id ?id :type ?type :name ?name}
[
{:id 1 :type :t1 :name "one" :other1 :o1}
{:id 2 :type :t2 :name "two" :other2 :o2}
])))
Tôi hiểu tại sao matcho
không được làm việc như các bản đồ không dài hơn như nhau. Quesiton của tôi là, làm thế nào tôi có thể thay đổi điều này để nó hoạt động trở lại? Làm thế nào để tôi làm cho nó khớp với một số phím trong bản đồ hoặc làm thế nào tôi có thể làm cho nó khớp với bất kỳ khóa ngẫu nhiên nào mà bản đồ có thể có?
EDIT:
tôi đã nhận nó để làm việc bằng patial-map
(nhờ https://github.com/clojure/core.logic/pull/10)
(run 10 [q]
(fresh [?id ?type ?name]
(membero ?type [:t2 :t1])
(== q [?id ?name])
(membero (partial-map {:id ?id :type ?type :name ?name})
[
{:id 1 :type :t1 :name "one" :other1 :o2}
{:id 2 :type :t2 :name "two" :other2 :o1}
])))
Tuy nhiên tôi thấy một lưu ý rằng featurec
nên được sử dụng thay vì partial-map
. Câu hỏi mới của tôi: Làm thế nào để thay đổi điều này để sử dụng featurec
?
Tôi đã thêm một Gist của mã thử nghiệm mà tôi đã sử dụng: https://gist.github.com/4454548 –