gpt4 book ai didi

clojure - 如何将定义的函数函数变成匿名函数

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

我想将一个已定义的函数变成一个匿名函数。我怎么做?以下函数返回序列中的最后一个元素:

(defn lastt [l]
(cond
(nil? (next l)) l
:else
(lastt (next l))))

如何把它变成fn形式?

PS:我知道last函数,这只是一个练习。

最佳答案

首先,该函数返回一个列表,其中包含最后一项。我会更改您的定义,以便它返回最后一项:

(defn lastt [l]
(cond
(nil? (next l)) (first l)
:else (lastt (next l))))

为简化起见,我将使用 let 绑定(bind),因为您在 l 上调用了两次 next:

(defn lastt [l]
(let [n (next l)]
(cond
(nil? n) (first l)
:else (lastt n))))

接下来我要做的是将对 last 的最终调用替换为使用 recur

(defn lastt [l]
(let [n (next l)]
(cond
(nil? n) (first l)
:else (recur n))))

然后我将其替换为

#(let [n (next %)]
(cond
(nil? n) (first %)
:else (recur n)))

并且刚刚意识到可以使用解构来进一步简化 :)

#(let [[h & t] %]
(cond
(nil? t) h
:else (recur t)))

已更新

不需要 cond,因为只有两个分支,使用 fn 而不是 # 速记将允许解构发生在 fn 的参数中,使整个函数更加简洁:

(fn [[h & t]]
(if (empty? t) h
(recur t)))

关于clojure - 如何将定义的函数函数变成匿名函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10764130/

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