读练http://groups.google.com/group/clojure/browse_thread/thread/b2df63353b89c27 有感
SLIME 代码,待整理.....
; SLIME 20100404
user> (apply + (map #(let [k (key %) v (val %)] (* v (cost k))) (cookbook :Coffee)))
(2.25 0.25 0.25)
user> (apply + (map #([[k (key %) v (val %)]] (* v (cost k))) (cookbook :Coffee)))
2.75
user> (defn aa [a]
(let [k (key a) v (val a)]
(* v (cost k))))
#'user/aa
user> (apply + (map aa (cookbook :Coffee)))
2.75
user> (map aa (cookbook :Coffee))
(2.25 0.25 0.25)
user> (apply + (map aa (cookbook :Coffee)))
2.75
user> (defn prn-one-menu [key]
(apply + (map aa (cookbook key))))
#'user/prn-one-menu
user> (prn-one-menu :Coffee)
2.75
user> (defn prn-menu []
(map #(prn (val %) ". " (key %)) menu))
; Evaluation aborted.
user> (def menu {:Coffee 1})
#'user/menu
user> (defn prn-menu []
(map #(prn (val %) ". " (key %)) menu))
#'user/prn-menu
user> (prn-menu)
(1 ". " :Coffee
nil)
user> (defn prn-menu []
(map #(prn (val %) (key %)) menu "Cost: ))
#'user/prn-menu
user> (prn-menu)
(1 :Coffee
nil)
user> (defn prn-menu []
(map #(prn (val %) ". " (key %)) menu))
#'user/prn-menu
user> (defn bb [key]
(apply + (map aa (cookbook key)))))
; Evaluation aborted.
user> (defn bb [key]
(apply + (map aa (cookbook key))))
#'user/bb
user> (bb :Coffee)
2.75
user> (defn prn-menu []
(map #(prn (val %) ". " (key %) (bb (key %)) menu))))
; Evaluation aborted.
user> (defn prn-menu []
(map #(prn (val %) ". " (key %) (bb (key %)) menu)))
#'user/prn-menu
user> (prn-menu)
; Evaluation aborted.
user> (defn prn-menu []
(map #(prn (val %) ". " (key %) (bb :Coffee) menu)))
#'user/prn-menu
user> (prn-menu)
; Evaluation aborted.
user> (defn prn-menu []
(map #(prn (val %) ". " (key %) (bb :Coffee) menu)))
#'user/prn-menu
user> (map #(prn (val %) ". " (key %) (bb :Coffee) menu)))
; Evaluation aborted.
user> (map #(prn (val %) ". " (key %) (bb :Coffee) menu))
; Evaluation aborted.
user> (map #(%) menu)
; Evaluation aborted.
user> (map #(key %) menu)
; Evaluation aborted.
user> menu
{:Coffee 1}
user> (map #(key %) menu)
(:Coffee)
user> (map #(prn (key %) (val %)) menu)
(:Coffee 1
nil)
user> (map #(prn (val %) (key %) menu))
; Evaluation aborted.
user> (map #(prn (val %) (key %)) menu)
; Evaluation aborted.
user> (map #(prn (val %) (key %)) (bb (key %)) menu)
(1 :Coffee
nil)
user> (map #(prn (val %) (key %) (bb (key %))) menu)
; Evaluation aborted.
user> (map #(prn (val %) (key %) (bb (key %))) menu)
(1 :Coffee 2.75
nil)
user> (defn prn-menu []
(map #(prn (val %) (key %) (bb (key %))) menu))
#'user/prn-menu
user> (prn-menu)
(1 :Coffee 2.75
nil)
user> (def cookbook {:Coffee {:coffee 3 :sugar 1 :cream 1}
:Decaf-Coffee {:decaf 3 :sugar 1 :cream 1}
:Caffe-Late {:espresso 2 :steamed-milk 1}
:Caffe-Americano {:espresso 3}
:Caffe-Moca {:espresso 1 :coco 1 :steamed-milk 1 :cream 1}
:Cappuccino {:espresso 2 :steamed-milk 1 :formed-milk 1}})
#'user/cookbook
user> (def cost {:coffee 0.75
:decaf 0.75
:sugar 0.25
:cream 0.25
:steamed-milk 0.35
:foamed-milk 0.35
:espresso 1.00
:cocoa 0.90
:whipped-cream 1.00})
#'user/cost
user> (def cookbook {:Coffee {:coffee 3 :sugar 1 :cream 1}
:Decaf-Coffee {:decaf 3 :sugar 1 :cream 1}
:Caffe-Late {:espresso 2 :steamed-milk 1}
:Caffe-Americano {:espresso 3}
:Caffe-Moca {:espresso 1 :cocoa 1 :steamed-milk 1 :cream 1}
:Cappuccino {:espresso 2 :steamed-milk 1 :formed-milk 1}})
#'user/cookbook
user> (def menu {:Coffee 1
:Decaf-Coffee 2
:Caffe-Late 3
:Caffe-Americano 4
:Caffe-Moca 5
:Cappuccino 6})
; Evaluation aborted.
user> (def menu {:Coffee 1
:Decaf-Coffee 2
:Caffe-Late 3
:Caffe-Americano 4
:Caffe-Moca 5
:Cappuccino 6})
#'user/menu
user> (prn-menu)
; Evaluation aborted.
user> (map #(prn (val %) (key %) ((key %))) menu))
; Evaluation aborted.
user> (map #(prn (val %) (key %) ) menu)
; Evaluation aborted.
user> (dorun (map #(prn (val %) (key %) ) menu))
(1 :Coffee
2 :Decaf-Coffee
nil 3 :Caffe-Late
nil 4 :Caffe-Americano
nil 5 :Caffe-Moca
nil 6 :Cappuccino
nil nil)
user> (map #(prn (val %) (key %) ) menu))
; Evaluation aborted.
user> (dorun (map #(prn (val %) (key %) ) menu))
1 :Coffee
2 :Decaf-Coffee
3 :Caffe-Late
4 :Caffe-Americano
5 :Caffe-Moca
6 :Cappuccino
nil
user> (dorun (map #(prn (val %) (key %) (bb (key %)) menu)))
; Evaluation aborted.
user> (defn bb [key]
(apply + (map aa (cookbook key))))
#'user/bb
user> (defn bb [k]
(k))
#'user/bb
user> (dorun (map #(prn (val %) (key %) (key %) menu)))
; Evaluation aborted.
user> (dorun (map #(prn (val %) (key %) (key %)) menu))
; Evaluation aborted.
user> (dorun (map #(prn (val %) (key %) (bb (key %))) menu))
1 :Coffee :Coffee
2 :Decaf-Coffee :Decaf-Coffee
3 :Caffe-Late :Caffe-Late
4 :Caffe-Americano :Caffe-Americano
5 :Caffe-Moca :Caffe-Moca
6 :Cappuccino :Cappuccino
nil
user> (dorun (map #(prn (val %) (key %) (bb (key %))) menu))
; Evaluation aborted.
user> (defn bb [k]
(k))
#'user/bb
user> (dorun (map #(prn (val %) (key %) (bb (key %))) menu))
; Evaluation aborted.
user> (defn bb [key]
(apply + (map aa (cookbook key))))
#'user/bb
user> (dorun (map #(prn (val %) (key %) (bb (key %))) menu))
1 :Coffee 2.75
2 :Decaf-Coffee 2.75
3 :Caffe-Late 2.35
4 :Caffe-Americano 3.0
; Evaluation aborted.
user> (def cookbook {:Coffee {:coffee 3 :sugar 1 :cream 1}
:Decaf-Coffee {:decaf 3 :sugar 1 :cream 1}
:Caffe-Late {:espresso 2 :steamed-milk 1}
:Caffe-Americano {:espresso 3}
:Caffe-Moca {:espresso 1 :cocoa 1 :steamed-milk 1 :cream 1}
:Cappuccino {:espresso 2 :steamed-milk 1 :formed-milk 1}})
#'user/cookbook
user> (dorun (map #(prn (val %) (key %) (bb (key %))) menu))
1 :Coffee 2.75
2 :Decaf-Coffee 2.75
3 :Caffe-Late 2.35
4 :Caffe-Americano 3.0
5 :Caffe-Moca 2.5
; Evaluation aborted.
user> (def cookbook {:Coffee {:coffee 3 :sugar 1 :cream 1}
:Decaf-Coffee {:decaf 3 :sugar 1 :cream 1}
:Caffe-Late {:espresso 2 :steamed-milk 1}
:Caffe-Americano {:espresso 3}
:Caffe-Moca {:espresso 1 :cocoa 1 :steamed-milk 1 :cream 1}
:Cappuccino {:espresso 2 :steamed-milk 1 :foamed-milk 1}})
#'user/cookbook
user> (dorun (map #(prn (val %) (key %) (bb (key %))) menu))
1 :Coffee 2.75
2 :Decaf-Coffee 2.75
3 :Caffe-Late 2.35
4 :Caffe-Americano 3.0
5 :Caffe-Moca 2.5
6 :Cappuccino 2.7
nil
user> (defn bb [key]
(reduce + (map aa (cookbook key))))
#'user/bb
user> (dorun (map #(prn (val %) (key %) (bb (key %))) menu))
1 :Coffee 2.75
2 :Decaf-Coffee 2.75
3 :Caffe-Late 2.35
4 :Caffe-Americano 3.0
5 :Caffe-Moca 2.5
6 :Cappuccino 2.7
nil
user> (doseq [id menu] (prn (key id)))
:Coffee
:Decaf-Coffee
:Caffe-Late
:Caffe-Americano
:Caffe-Moca
:Cappuccino
nil
user> (doseq [name id menu] (prn (key id)))
; Evaluation aborted.
user> (doseq [[name id] menu] (prn (key id)))
; Evaluation aborted.
user> (doseq [menu] (prn)
)
; Evaluation aborted.
user> (doseq [a menu] (prn))
nil
user> (doseq [a menu] (prn a))
[:Coffee 1]
[:Decaf-Coffee 2]
[:Caffe-Late 3]
[:Caffe-Americano 4]
[:Caffe-Moca 5]
[:Cappuccino 6]
nil
user> (doseq [menu] (prn))
; Evaluation aborted.
user> (doseq [name (menu key)] (prn name))
nil
user> (doseq [name (menu key) id (menu val] (prn name))
nil
user> (doseq [[a b] menu] (prn a b))
:Coffee 1
:Decaf-Coffee 2
:Caffe-Late 3
:Caffe-Americano 4
:Caffe-Moca 5
:Cappuccino 6
nil
user> (doseq [[a b] menu] (prn a "," b))
:Coffee "," 1
:Decaf-Coffee "," 2
:Caffe-Late "," 3
:Caffe-Americano "," 4
:Caffe-Moca "," 5
:Cappuccino "," 6
nil
user> (doseq [[name id] menu] (prn (str id "," name)))
"1,:Coffee"
"2,:Decaf-Coffee"
"3,:Caffe-Late"
"4,:Caffe-Americano"
"5,:Caffe-Moca"
"6,:Cappuccino"
nil
user> (doseq [[name id] menu] (prn (str id name)))
"1:Coffee"
"2:Decaf-Coffee"
"3:Caffe-Late"
"4:Caffe-Americano"
"5:Caffe-Moca"
"6:Cappuccino"
nil
user> (doseq [[name id] menu] (prn (str id name (bb name))))
"1:Coffee2.75"
"2:Decaf-Coffee2.75"
"3:Caffe-Late2.35"
"4:Caffe-Americano3.0"
"5:Caffe-Moca2.5"
"6:Cappuccino2.7"
nil
user> (doseq [[name id] menu] (prn (str id name (bb name))))
"1:Coffee2.75"
"2:Decaf-Coffee2.75"
"3:Caffe-Late2.35"
"4:Caffe-Americano3.0"
"5:Caffe-Moca2.5"
"6:Cappuccino2.7"
nil
user> (doseq [[name id] menu]
(prn (str id name ":" (bb name))))
"1:Coffee:2.75"
"2:Decaf-Coffee:2.75"
"3:Caffe-Late:2.35"
"4:Caffe-Americano:3.0"
"5:Caffe-Moca:2.5"
"6:Cappuccino:2.7"
nil
user> (doseq [[name id] menu]
(prn (str id name ":"
(map + #(let [k (key %) v (val %)] (* (cost k) v)) cookbook))))
; Evaluation aborted.
user> (doseq [[name id] menu]
(prn (str id name ":"
(map + #(let [k (key %) v (val %)] (* (cost %) v)) cookbook))))
; Evaluation aborted.
user> (doseq [[name id] menu]
(prn (str id name ":"
(map + #(let [k (key %) v (val %)] (* 1 v)) cookbook))))
; Evaluation aborted.
user> (doseq [[name id] menu]
(prn (str id name ":"
(map + #(let [k (key %) v (val %)] (* 1 v)) cookbook))))
; Evaluation aborted.
user> (doseq [[name id] menu]
(prn (str id name ":"
(map + #(let [k (key %) v (val %)] (* 1 v)) (cookbook name)))))
; Evaluation aborted.
user> (map + #(let [k (key %) v (val %)] (* (cost v))) (cookbook :Coffee))
; Evaluation aborted.
user> (map + #(let [k (key %) v (val %)] (cost k)) (cookbook :Coffee))
{:coffee 3, :sugar 1, :cream 1}
user> (map str #(let [k (key %) v (val %)] (cost k)) (cookbook :Coffee))
; Evaluation aborted.
user> (map str #(let [k (key %) v (val %)] (v)) (cookbook :Coffee))
; Evaluation aborted.
user> (map + #(let [k (key %) v (val %)] (v)) (cookbook :Coffee))
; Evaluation aborted.
user> (map #(let [k (key %) v (val %)] (v)) (cookbook :Coffee))
; Evaluation aborted.
user> (map #(let [k (key %) v (val %)] (v)) (cookbook :Coffee))
; Evaluation aborted.
user> (map #(let [k (key %) v (val %)] (* (cost k) v)) (cookbook :Coffee))
; Evaluation aborted.
user> (map + (map #(let [k (key %) v (val %)] (* (cost k) v)) (cookbook :Coffee)))
(2.25 0.25 0.25)
user> (map #(let [k (key %) v (val %)] (* (cost k) v)) (cookbook :Coffee))
; Evaluation aborted.
user> (map + (map #(let [k (key %) v (val %)] (* (cost k) v)) (cookbook :Coffee)))
(2.25 0.25 0.25)
user> (reduce + (map #(let [k (key %) v (val %)] (* (cost k) v)) (cookbook :Coffee)))
(2.25 0.25 0.25)
user> (reduce + (map #(let [k (key %) v (val %)] (* (cost k) v)) (cookbook :Coffee)))
2.75
user> (reduce + (map #(let [k (key %) v (val %)] (* (cost k) v)) (cookbook :Coffee)))
2.75
user> (doseq [[name id] menu]
(println (str id ", " name ","
(reduce + (map #(let [k (key %) v (val %)] (* (cost k) v)) (cookbook name))))))
1, :Coffee,2.75
2, :Decaf-Coffee,2.75
3, :Caffe-Late,2.35
4, :Caffe-Americano,3.0
5, :Caffe-Moca,2.5
6, :Cappuccino,2.7
nil
user> (doseq [[name id] menu]
(println (str id "," name ","
(reduce + (map #(let [k (key %) v (val %)] (* (cost k) v)) (cookbook name))))))
1,:Coffee,2.75
2,:Decaf-Coffee,2.75
3,:Caffe-Late,2.35
4,:Caffe-Americano,3.0
5,:Caffe-Moca,2.5
6,:Cappuccino,2.7
nil
user> (doseq [[name id] menu]
(println (str id name ":"
(reduce + (map #(let [k (key %) v (val %)] (* (cost k) v)) (cookbook name))))))
1:Coffee:2.75
2:Decaf-Coffee:2.75
3:Caffe-Late:2.35
4:Caffe-Americano:3.0
5:Caffe-Moca:2.5
6:Cappuccino:2.7
nil
user> (name :Coffee)
"Coffee"
user> (doseq [[name id] menu]
(println (str id name ":"
(reduce + (map (fn [[k v]] (* (cost k) v)) (cookbook name))))))
1:Coffee:2.75
2:Decaf-Coffee:2.75
3:Caffe-Late:2.35
4:Caffe-Americano:3.0
5:Caffe-Moca:2.5
6:Cappuccino:2.7
nil
user>