【问题标题】:Apply a function n times on a starting value在起始值上应用函数 n 次
【发布时间】:2017-10-09 21:52:18
【问题描述】:

基本上我想在 x 上应用 f n 次,我只对结果感兴趣。还有比(nth (iterate f x) n)更好的办法吗?

【问题讨论】:

  • 这已经非常简洁易读了。除非你打高尔夫球,否则我认为你不会比这更好。如果你觉得它太多了,你总是可以把它塞进一个函数里。
  • 我经常只对迭代的结果感兴趣。只是想知道我正在监督是否已经内置了一种更具表现力的方式,例如(dotimes n x body)
  • 如果你还没有,我会启动你自己的库,并在其中粘贴一个快捷功能。我找不到更好的“原始”方式来表达这一点。 “f 在 x 上的第 n 次迭代”已经读起来很不错了。
  • @Carcigenicate 嗯,它几乎很好,但是nth 以“错误”的顺序接受它的论点,并且总是难以阅读。如果你想要一些读起来像英语的东西(重要的是,把 nth 放在 n 附近),你可以做类似 (-> (iterate f x) (nth n)): "iterate f over x n times"。
  • @amalloy 也许会好一点。我尽量避免线程化单个表单。我发现它通常会妨碍可读性。这可能是一个例外。不过个人意见。

标签: clojure


【解决方案1】:

正如评论者所说,您的解决方案已经可以了。 另一种选择是使用comp,可能是这样的:

user> (defn n-times [n f]
        (apply comp (repeat n f)))
#'user/n-times

user> ((n-times 10 inc) 1)
;;=> 11

我仍然不能说它是否在任何方面都比你的更好。 也许更实用一些[ish]

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2013-02-23
    • 2019-03-28
    • 2017-04-30
    • 1970-01-01
    • 2015-12-12
    • 1970-01-01
    • 2016-05-15
    • 1970-01-01
    相关资源
    最近更新 更多