3
은 (만약 그렇다면 어떻게 구현해야한다) core.logic에서core.logic 쿼리가 포함
string-containso
과 같이 가능하다면 나는 골동품을 해요. 편리 당신이 검색하는 문자열을 알고 있다면
이은 (만약 그렇다면 어떻게 구현해야한다) core.logic에서core.logic 쿼리가 포함
string-containso
과 같이 가능하다면 나는 골동품을 해요. 편리 당신이 검색하는 문자열을 알고 있다면
이, 당신은 pred
을 사용할 수 있습니다 사전에
(db-rel person x)
(def database
(db
[person "John"]
[person "Jane"]
[person "Jim"]
[person "Dan"]
[person "Bob"]))
(with-db database
(run* [q]
(string-containso q "o")))
;would return ("John" "Bob")
감사와 같은
예를 들어 사용이 될 뭔가
부기, 술어를 들어 올리는 경우 core.logic
:
(defn string-containso
[string substring]
(pred string #(.contains % substring)))
(with-db database
(run* [q]
(person q)
(string-containso q "o")))
; => (John Bob)
하위 문자열을 검색 할 수있게하려면 좀 더 흥미 롭습니다. 당신은 문자열의 하위 문자열을 모두 열거하고는 하나의 주어진 포함 여부를 확인 시도 할 수 : 이제
(defn substrings
[s]
(for [start (range (inc .length s))
end (range (inc start) (inc (.length s)))]
(.substring s start end)))
(defn string-containso
[string substring]
(fresh [all-substrings]
(is all-substrings string substrings)
(membero substring all-substrings)))
을, 당신은 아직도 당신이 전에했던이 방식으로 사용할 수 있습니다
(with-db database
(run* [q]
(person q)
(string-containso q "o")))
; => (John Bob)
을하지만 당신은 또한 사용할 수 있습니다 모든 하위 문자열을 가져 오는 것 :
(with-db database
(run* [q]
(fresh [p]
(person p)
(string-containso p q))))
; => (J Jo J Joh John Ji o J oh Jim ohn h i hn Ja n im D m Jan B Jane Da a Bo an Dan ane Bob n a ne o e an ob n b)
멋진 답변입니다. 훌륭한 답변을 많이 드리겠습니다. – boogie666