gpt4 book ai didi

Clojure : Idiomatic (when (predicate x) x)

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

以同样的方式可以转换

(if (something)
something
fallback)

进入较短的版本:

(or something fallback)

我想知道是否有一个组合函数/优雅的内置函数可以将值线程化到谓词的验证中,例如:

(when (pred x)
x)

进入类似的事情

(thread-pred pred x)

我可以轻松地构建一些函数或宏来做到这一点,但我不想在这里去 NIH。

最佳答案

我花了比我愿意承认的更长的时间 - 但你看:

小心这可能会爆炸。

(defmacro -pred-> 
[pred body]
`(when (~pred ~body) ~body))

(macroexpand-1 '(-pred-> odd? 3))
=> (clojure.core/when (odd? 3) 3)

(-pred-> odd? 3)
=> 3

(-pred-> odd? 2)
=> nil
<小时/>

编辑:正如评论正确指出的那样,将主体绑定(bind)到 autogensym 会更明智,如下所示:

(defmacro -pred-> 
[pred body]
`(let [b# ~body]
(when (~pred b#) b#)))

关于Clojure : Idiomatic (when (predicate x) x),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43094185/

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