gpt4 book ai didi

clojure - Lisp/Clojure 中的副作用

转载 作者:太空宇宙 更新时间:2023-11-03 18:37:12 25 4
gpt4 key购买 nike

我的问题是关于构造带有副作用的 lisp 代码。我想到的特定示例来自 Clojure,但我认为它可以适用于任何 lisp。

在这种情况下,我正在与一个现有库进行交互,该库需要按特定顺序调用某些函数。最后的函数调用创建了我在其余过程中需要的值。

代码如下所示:

(defn foo [] 
(let [_ procedure-with-side-effect
__ another-procedure-with-side-effect
value procedure-that-creates-the-value]
(do-something value)))

这有效,一切都很好,除了我认为 let block 看起来很丑陋。有更好的方法吗?

最佳答案

如果你不需要函数调用的中间值,你可以在 defn 的主体中放置一堆函数调用:

(defn foo [] 
(procedure-with-side-effect)
(another-procedure-with-side-effect)
(do-something (procedure-that-creates-the-value)))

虽然这是此代码的最佳选择,但还有其他选项。您还可以在 let 的主体中放置任意数量的函数调用:

(let [val 3]
(fun-call-1)
(fun-call-2)
(fun-call-3 val))

如果你不想绑定(bind)任何值,你可以使用do :

(do (fun-call-1)
(fun-call-2)
(fun-call-3))

关于clojure - Lisp/Clojure 中的副作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22241535/

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