【问题标题】:Clojure: How to use Mapping with an Anonymous Function?Clojure:如何将映射与匿名函数一起使用?
【发布时间】:2020-03-08 02:08:30
【问题描述】:
 (defn recurse

   [temp total]                    ;total is: (and true true(and false))

  (map (fn [i]
     (cond
      (seq? i) (println "");If total is not a single parenthesis (single sequence), recur until it is

      (= i 'and)  (System/exit 0)  ;I want this to be called only when the **second** "and" is called

      :else (println "This should never print I think")
       ))
   idealreturn)
)

我希望 (System/exit 0) 仅在total 中检测到第二个“and”而不是之前被调用。我该怎么做呢?

【问题讨论】:

    标签: function clojure


    【解决方案1】:

    你在正确的轨道上映射一个函数到数据上来转换它。有几种方法可以获取您想要的内容:

    1. 不要使用map,而是使用reduce。 Reduce 用于随着时间的推移建立状态。所以你可以把它简化成一个表达式,每次遇到and时,你会查看你正在构建的结果中是否已经有一个and,如果and已经在那里,请调用出口。
    2. 让您在输入上映射的函数只做一件事,将单个项目转换为更有意义的事情。然后一旦完成,将该结果传递给第二个函数,该函数检查是否该退出。

    为每件事赋予一个责任,这样代码编写起来就容易得多,并且在后面编写它们既高效又容易。当您稍后回来处理代码时,这对您来说也容易得多。

    【讨论】:

    • 1.不起作用,因为可能不仅仅是“和”。那只是为了简单。关于 2. 我确实有一个函数可以检查是否只有一个序列并操纵最后一件事:(cond(not-any?seq?total)(finalevaluation temp))......但是,它仍然两次“调用”“and”行
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-12-03
    • 2019-06-08
    • 2013-01-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多