กำลังพยายามเขียนฟังก์ชันที่ประกอบขึ้นใน clojure ที่ออกที่ค่าศูนย์แรก (เช่นสิ่งที่คุณทำโดยการผูกมัด Maybes ไว้ด้วยกันใน haskell) ด้วยสิ่งต่อไปนี้:
(defn wrap [f] (fn [x] (if (nil? x) nil (f x))))
(defn maybe [arg & functs] ( (comp (reverse (map wrap functs))) arg))
เพื่อที่ฉันจะได้เช่น
(defn f1 [x] (+ x 1))
(maybe 1 f1 f1 ) => 3
(maybe nil f1 f1) => nil
ซึ่งน่าเสียดายที่ให้สิ่งนี้แก่ฉัน: ClassCastException clojure.lang.PersistentList ไม่สามารถส่งไปยังผู้ใช้ clojure.lang.IFn/อาจจะ (NO_SOURCE_FILE:1)
ใครสามารถให้ความช่วยเหลือในสิ่งที่ฉันทำผิดที่นี่? วิธีสำนวนในการทำเช่นนี้คืออะไร?