gpt4 book ai didi

clojure - core.logic 查询字符串包含

转载 作者:行者123 更新时间:2023-12-02 16:08:10 25 4
gpt4 key购买 nike

我很好奇是否可能(如果可以的话应该如何实现)类似的东西

string-containso

在 core.logic 中。

示例用法类似于

(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")

提前致谢,

布吉

最佳答案

如果您知道要搜索的子字符串,则可以使用 pred ,这可以方便地将任何谓词提升到 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)

关于clojure - core.logic 查询字符串包含,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39809946/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com