不可思议的Destructuring

本文通过Clojure语言实现了一套咖啡菜单定价系统。利用Clojure的map和reduce函数,结合自定义函数处理咖啡种类及其配料成本,实现了菜单中各咖啡品种的价格计算,并通过不同方式展示了菜单项及价格。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

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

一、综合实战—使用极轴追踪方式绘制信号灯 实战目标:利用对象捕捉追踪和极轴追踪功能创建信号灯图形 技术要点:结合两种追踪方式实现精确绘图,适用于工程制图中需要精确定位的场景 1. 切换至AutoCAD 操作步骤: 启动AutoCAD 2016软件 打开随书光盘中的素材文件 确认工作空间为"草图与注释"模式 2. 绘图设置 1)草图设置对话框 打开方式:通过"工具→绘图设置"菜单命令 功能定位:该对话框包含捕捉、追踪等核心绘图辅助功能设置 2)对象捕捉设置 关键配置: 启用对象捕捉(F3快捷键) 启用对象捕捉追踪(F11快捷键) 勾选端点、中心、圆心、象限点等常用捕捉模式 追踪原理:命令执行时悬停光标可显示追踪矢量,再次悬停可停止追踪 3)极轴追踪设置 参数设置: 启用极轴追踪功能 设置角度增量为45度 确认后退出对话框 3. 绘制信号灯 1)绘制圆形 执行命令:"绘图→圆→圆心、半径"命令 绘制过程: 使用对象捕捉追踪定位矩形中心作为圆心 输入半径值30并按Enter确认 通过象限点捕捉确保圆形位置准确 2)绘制直线 操作要点: 选择"绘图→直线"命令 捕捉矩形上边中点作为起点 捕捉圆的上象限点作为终点 按Enter结束当前直线命令 重复技巧: 按Enter可重复最近使用的直线命令 通过圆心捕捉和极轴追踪绘制放射状直线 最终形成完整的信号灯指示图案 3)完成绘制 验证要点: 检查所有直线是否准确连接圆心和象限点 确认极轴追踪的45度增量是否体现 保存绘图文件(快捷键Ctrl+S)
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值