gpt4 book ai didi

clojure - 如何检查函数是否是部分函数?

转载 作者:行者123 更新时间:2023-12-04 16:22:21 26 4
gpt4 key购买 nike

是否有可能检查某些东西是否是 Clojure 中的部分函数?

最好有类似 (partial? (partial + 10)) 的东西?

提前致谢

最佳答案

不,因为 partial 创建的函数只是“普通”函数。
但是,您可以为它使用一些元数据,如下所示:

(defn partial2 [f & more]
(with-meta (apply partial f more) {:partial true}))

(def partial-plus (partial2 + 1 2))

(meta partial-plus) ;;=> {:partial true}

虽然还没有真正考虑过这种方法的后果......

Kotarak 提出了一个更好的解决方案,但并非总是如此。例如拿这个:
(partial? (partial + 1)) ;;=> true
(partial? (partial + 1 2)) ;;=> false

这有效:
(defn partial? [f]
(let [[fst snd] (-> (class f) (.getName) (string/split #"\$"))]
(= ["clojure.core" "partial"] [fst snd])))

string/split 是来自 clojure.string (1.3) 或 clojure.contrib.str-utils2 (1.2) 的 split 函数。

关于clojure - 如何检查函数是否是部分函数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9464448/

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