我正在阅读电子书《Scala 和 Clojure 中的函数式编程模式》,并找到了导致此问题的代码示例。
这段代码旨在比较两个 Person 对象。比较算法是 - 首先比较它们的 FName,如果相等则比较它们的 LName,如果相等则比较它们的 MName。
书中给出的 Clojure 代码(或多或少)
(def person1 {:fname "John" :mname "Q" :lname "Doe"})
(def person2 {:fname "Jane" :mname "P" :lname "Doe"})
(defn fname-compare [p1 p2]
(do
(println "Comparing fname")
(compare (:fname p1) (:fname p2))))
(defn lname-compare [p1 p2]
(do
(println "Comparing lname")
(compare (:lname p1) (:lname p2))))
(defn mname-compare [p1 p2]
(do
(println "Comparing mname")
(compare (:mname p1) (:mname p2))))
(defn make-composed-comparison [& comparisons]
(fn [p1 p2]
(let …Run Code Online (Sandbox Code Playgroud) clojure ×1