SICP Section 2.2.1

Exercise 2.17

#lang racket
(define (last-pair l)
  (if (null? (cdr l)) 
      l
      (last-pair (cdr l))))

Exercise 2.18

#lang racket

; (define (reverse list)
;   (define (mid-reverse list midlist)
;     (if (null? list)
;         midlist
;         (mid-reverse (cdr list) (cons (car list) midlist))))
;   (mid-reverse list '()));'() can't be replaced as (list) why?


;use append
(define (reverse items)
  (if (null? items)
      (list)
      (append 
       (reverse (cdr items))
                (list (car items)))))
      

Exercise 2.19

#lang racket
(define (cc amount coin-values)
  (cond ((= amount 0) 1)
        ((or (< amount 0) (no-more? coin-values)) 0)
        (else
         (+ (cc amount
                (except-first-denomination coin-values))
            (cc (- amount
                   (first-denomination coin-values))
                coin-values)))))

(define no-more? null?)

(define except-first-denomination cdr)

(define first-denomination car)

(define us-coins (list 50 25 10 5 1))

(cc 100 us-coins)

Exercise 2.20

#lang racket
;the two number is same even-odd parity?
(define (same-kind? first second)
  (= (remainder (- first second) 2) 0))
;compare the first to the rest recursely
(define (same-parity first . dulp)
  (let ((dulpp dulp))
    (define (parity first dulpp)
        (if (null? dulpp)
            (list first)
            (let ((comparison (car dulpp))
                  (rest (cdr dulpp)))
              (if (same-kind? first comparison)  
                  (cons first (parity comparison rest))
                  (parity first rest)))))
     (parity first dulpp)))
;output
(same-parity 2 4 6 8 9 10)
            

Summarize

      闭包很强大,它允许我们轻松的创造层级结构,换言之,它能够创造很多基本的或复杂的数据结构,比如序列和树。任何强有力的编程语言都会提供这种能力得意

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值