代码之家  ›  专栏  ›  技术社区  ›  TomJava

Clojure koans解决方案-但使用函数名编写它们通常更好

  •  0
  • TomJava  · 技术社区  · 7 年前

    (= 25 (__ square))
    

    这个问题来自clojure koans

    2 回复  |  直到 7 年前
        1
  •  2
  •   Thumbnail    7 年前

    我们需要一个应用于函数的函数 square ,收益率 25 . 答案 given by Alan Thompson ...

    (fn [f] (f 5))
    

    ... 这是预期的结果。但还有无数其他的。最简单的是返回值为25的函数,无论其参数是什么:

    (fn [_] 25)
    

    constantly

    (constantly 25)
    

    我们可以通过重写函数对参数的响应,将任何能够接受单个参数的函数转换为解决方案 广场 :

    (defn convert [g] (fn [x] (if (= x square) 25 (g x))))
    

    例如

    => ((convert +) square)
    25
    
        2
  •  1
  •   Kamil Marszal    6 年前

    #(% 5)
    

    以下哪一项给出了最终解决方案?

    (= 25 (#(% 5) square)))
    
        3
  •  0
  •   Alan Thompson    7 年前

    答案如下:

    (fn [f] (f 5))  ; missing piece
    

    您还需要知道函数 square (fn [x] (* x x)) 从上一个问题。你必须像上面那样定义一个(非常愚蠢的格式)函数,并在适当的地方调用它。在现实生活中,我从未见过这种可怕的格式。

    作为记录,整个答案将如下所示:

    (= 25 ( (fn [f] (f 5)) square))
    

    前一个问题#9定义了:

    (defn square [n] (* n n))
    

    推荐文章