SICP 2.56 2.57 2.58

2.56

(define (exponentiation? x)
  (and (pair? x) (eq? (car x) '**)))

(define (base x)
  (cadr x))

(define (exponent x)
  (caddr x))

(define (make-exponentiation a b)
  (cond ((= b 0) 1)
        ((= b 1) a)
        (else (list '** a b))))

(define (deriv exp var)
  (cond ((number? exp) 0)
        ((variable? exp)
         (if (same-variable? exp var) 1 0))
        ((sum? exp)
         (make-sum (deriv (addend exp) var)
                   (deriv (augend exp) var)))
        ((product? exp)
         (make-sum
           (make-product (multiplier exp)
                         (deriv (multiplicand exp) var))
           (make-product (deriv (multiplier exp) var)
                         (multiplicand exp))))
        ((exponentiation? exp)
         (make-product (exponent exp)
                       (make-product (make-exponentiation (base exp) (- (exponent exp) 1))
                                     (deriv (base exp) var))))
        (else
         (error "unknown expression type -- DERIV" exp))))

2.57

make-sum和make-product也可以优化

(define (augend s)
  (if (= (length s) 3)
      (caddr s)
      (cons '+ (cddr s))))

(define (multiplicand p)
  (if (= (length p) 3)
      (caddr p)
      (cons '* (cddr p))))

(define (make-sum a1 a2)
  (cond ((=number? a1 0) a2)
        ((=number? a2 0) a1)
        ((and (number? a1) (number? a2)) (+ a1 a2))
        ((and (sum? a1) (sum? a2)) (cons '+ (append (cdr a1) (cdr a2))))
        ((and (sum? a1) (number-or-variable? a2)) (append a1 (list a2)))
        ((and (number-or-variable? a1) (sum? a2)) (cons '+ (cons a1 (cdr a2))))
        (else (list '+ a1 a2))))

(define (make-product m1 m2)
  (cond ((or (=number? m1 0) (=number? m2 0)) 0)
        ((=number? m1 1) m2)
        ((=number? m2 1) m1)
        ((and (number? m1) (number? m2)) (* m1 m2))
        ((and (sum? m1) (sum? m2)) (cons '+ (append (cdr m1) (cdr m2))))
        ((and (sum? m1) (number-or-variable? m2)) (append m1 (list m2)))
        ((and (number-or-variable? m1) (sum? m2)) (cons '+ (cons m1 (cdr m2))))
        (else (list '* m1 m2))))

2.58

(define (sum? x)
  (and (pair? x) (eq? (cadr x) '+)))

(define (addend s) (car s))

(define (product? x)
  (and (pair? x) (eq? (cadr x) '*)))

(define (multiplier p) (car p))

(define (make-sum a1 a2)
  (cond ((=number? a1 0) a2)
        ((=number? a2 0) a1)
        ((and (number? a1) (number? a2)) (+ a1 a2))
        (else (list a1 '+ a2))))

(define (make-product m1 m2)
  (cond ((or (=number? m1 0) (=number? m2 0)) 0)
        ((=number? m1 1) m2)
        ((=number? m2 1) m1)
        ((and (number? m1) (number? m2)) (* m1 m2))
        (else (list m1 '* m2))))

 

转载于:https://my.oschina.net/guzhou/blog/914570

Oscdimg 是一个命令行工具,用于创建自定义的 32 位或 64 位版本的 Windows PE 映像文件 (.iso)。然后可以将该 .iso 文件刻录到 CD-ROM 或 DVD-ROM。Oscdimg 支持 ISO 9660、Joliet 和通用磁盘格式 (UFD) 文件系统。 oscdimg.exe -t07/26/2012,19:57:24 -h -m -o -n -x -lHRM_CCSA_X64FRE_ZH-CN_DV5 -bboot.bin j:\ .\cn_windows_8_x64_dvd_915407.ISO 上述命令中各参数含义分别为: -l:设置光盘卷标。此处为“HRM_CCSA_X64FRE_ZH-CN_DV5 ”。 -t:设置光盘上所有文件的生成日期。此处为“2012年7月26日格林威治时间(GMT)上午11:57:24 ”。 -g:转换本地时间与格林威治时间(GMT)。但如果是在Windows XP系统下,该参数似乎不起作用,“-t”参数指定的是GMT时间,而文件的生成时间是“-t”指定的时间加上时区转换后的本地时间。如,上例中的文件生成本地时间是“19:57:24 ”,即GMT+8=北京时间。 -h:包含隐藏的目录和文件。 -n:允许长文件名。 -o:优化相同的文件,最重要的参数。 -m:允许生成的ISO文件超过640 MB。 -b:光盘启动引导程序,此处我们使用了WIN7的启动文件:boot.bin 如果是XP选择:w2kall.bin。 j:\:源文件路径,将作为光盘的根目录(如果是当前目录设置为:.\WIN8\cn_windows_8_x64_dvd_915407\)。 .\cn_windows_8_x64_dvd_915407.ISO:最后生成的ISO文件(位于当前目录)。 更多参数设置: http://technet.microsoft.com/zh-cn/library/cc749036(WS.10).aspx
微软内部镜像封装工具:CDIMAGE_2.54 参数: CDIMAGE 2.46 CD-ROM and DVD-ROM Premastering Utility Copyright (C) Microsoft, 1993-2000. All rights reserved. For Microsoft internal use only. Usage: CDIMAGE [參數] 來源目錄 目標影像檔 -l 光碟標籤,不含空白鍵 (e.g. -lMYLABEL) -t 將所有檔案和目錄都設為同一日期,不含空白鍵和任何特殊符號 (e.g. -t12/31/2000,15:01:00) -g 將時間設為 GMT 時間而非本地時間 -h 包含隱藏檔和隱藏目錄 -n 允許長檔名 (超過 8.3 檔名) -nt 允許長檔名,但受限於 NT3.51 相容性 (-nt 和 -d 不可同時使用) -d 不強制將小寫檔名改為大寫檔名 -c 使用 ANSI 檔名以對應原始目錄中的 OEM 檔名 -j1 編碼為 Joliet Unicode 檔名並在 ISO-9660 名稱空間中產生相容於 DOS 的 8.3 檔名格式. (可在 Joliet 系統或其他一般的 ISO-9660 系統中被讀取, 但某些檔名在 ISO-9660 名稱空間中可能會被改變, 以遵守 DOS 8.3 與 ISO-9660 命名限制) -j2 編碼為 Joliet Unicode 檔名而不遵守 ISO-9660 檔名規則 (必須在 Joliet 作業系統從 CD 讀取檔案) 當使用 -j1 或 -j2 參數時, -n, -nt, 和 -d 參數無法生效 並且不可使用. -js 以 -j2 參數將影像檔中的非 Joliet 檔案 "readme.txt" 編碼. (e.g. -jsc:\location\readme.txt). 這樣可以讓這張光碟的這個唯一的檔案在不支援 Joliet 格式的系統中 (Windows 3.1, NT 3.x...等)被看見. -u1 編碼為 "UDF-Bridge" 媒體 -u2 編碼為 "UDF" 檔案系統而不對映 ISO-9660 檔案系統 (必須有 UDF 相容作業系統才可讀取檔案) -ur 以 -u2 參數將影像檔中的非 UDF 檔案 "readme.txt" 編碼. (e.g. -usc:\location\readme.txt). 這樣可以讓這張光碟的這個唯一的檔案在不支援 UDF 格式的系統中 被看見. -us 分散 UDF 檔案 -ue embed file data in UDF extent entry -uf embed UDF FID entries -uv UDF Video Zone compatibility enforced -b "El Torito" 開機區段檔案,不佔檔案空間 (e.g. -bc:\location\cdboot.bin) -p Platform ID for the "El Torito" boot catalog -e 在 El Torito 開機記錄中設置不模擬軟碟。 -s 在影像檔中加入數位簽章 (不佔空間, 必須提供 RPC 伺服器與終點名稱如下 -sServerName:EndPointName) -x 在影像檔中計算與編碼 "AutoCRC" 值 -o 處理重複檔名以將影像檔大小最佳化 (譯註:縮小影像檔容量,即本程式之精華所在) -oc 使用二進位比對代替 MD5 雜湊值, 這會以較慢的速度比對重複的檔案. -oi 比對檔案時忽略高度壓縮的時間戳記 -os 建立影像檔時顯示重複的檔名 (-o 等類似參數不可簡寫為 -ocis) -w 依照數字提供不同的警告等級 (e.g. -w4) 1 回報非 ISO 或非 Joliet 相容檔名或路徑 2 回報非 DOS 相容檔名 3 回報長度為零的檔案 4 回報每一個加入影像檔中的檔名 -y 依照數字提供不同的測試選項 (e.g. -y1),用於測試用途, 可產生不遵守 ISO-966
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值