gpt4 book ai didi

Clojure循环/重复模式,不好用吗?

转载 作者:行者123 更新时间:2023-12-03 15:17:59 25 4
gpt4 key购买 nike

我正在学习Clojure,并且正在使用4Clojure
作为一种资源。我可以解决网站上的许多“简单”问题,但是对我来说,以函数式编程的思维方式思考仍然不是自然而然的(我来自Java)。结果,我在大多数seq构建实现中都使用了循环/递归迭代模式,因为这就是我习惯的思维方式。

但是,当我查看经验丰富的Clojure用户的答案时,他们会以更加实用的方式进行操作。例如,in a problem about implementing the range function,我的回答是:

(fn [start limit]
(loop [x start y limit output '()]
(if (< x y)
(recur (inc x) y (conj output x))
(reverse output))))

在执行此操作的同时,其他用户执行了以下操作:
(fn [x y] (take (- y x) (iterate inc x)))
我的功能比较冗长,我什至不知道“迭代”功能是否存在。但是从效率的角度来看,我的回答是否更糟?循环/重复使用是否比替代方法更差?我担心这种事情将来会在我身上发生很多,因为还有很多我不知道的函数,例如迭代。

最佳答案

第二个变体返回一个惰性序列,该序列实际上可能更有效,尤其是在范围较大的情况下。

另一件事是第二种解决方案更好地传达了这一想法。换句话说,它描述了意图而不是实现。与您的代码相比,您需要花费更多的时间来理解它,而您的代码则必须通读循环主体并在脑海中构建控制流模型。

关于新功能的发现:是的,您可能事先不知道已经定义了某些功能。比方说,在Haskell中,您可以通过类型签名来搜索函数,这很容易,但是通过一定的经验,您将学会识别这样的函数编程模式。您将像第二个变体一样编写代码,然后在标准库中查找类似于takeiterate的代码。

关于Clojure循环/重复模式,不好用吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32641902/

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