不可思议的Destructuring

读练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>

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值