2.2 层次闭包性质 练习 2.17 2.20

原创 2016年06月01日 15:42:35
#lang racket

(define a (list 1 2 3 4))

(define (list-ref items n)
  (if (= n 0)
      (car items)
      (list-ref (cdr items) (- n 1))))

#|
(define (length items)
  (if (null? items)
      0
      (+ 1 (length (cdr items)))))
|#

(define (length items)
  (define (iter items len)
    (if (null? items)
        len
        (iter (cdr items ) (+ 1 len))))
  (iter items 0))

;: (length a

;: 练习 2.17
;: 如果 items 本来为null? 应该报错
(define (last-pair items)
  (if (null? (cdr items))
      (car items)
      (last-pair (cdr items))))

(last-pair (list 23 72 149 34))

;: 练习 2.18
(define (reverse items)
  (if (null? items)
      '()
      (append (reverse (cdr items))
              (list (car items)))))

;: 测试
(reverse (list 1 2 3 4))



;: 练习 2.19
;:

#| 原来的方式
(define (count-change amount)
  (cc amount 5))

(define (cc amount kinds-of-coins)
  (cond ((= amount 0) 1)
        ((or (< amount 0)
             (= kinds-of-coins 0))
         0)
        (else (+ (cc amount
                     (- kinds-of-coins 1))
                 (cc (- amount
                        (first-denomination kinds-of-coins))
                     kinds-of-coins)))))

(define (first-denomination kinds-of-coins)
  (cond ((= kinds-of-coins 1) 1)
        ((= kinds-of-coins 2) 5)
        ((= kinds-of-coins 3) 10)
        ((= kinds-of-coins 4) 25)
        ((= kinds-of-coins 5) 50)))

(count-change 100) => 292
|#

(define us-coins (list 50 25 10 5 1))
(define uk-coins (list 100 50 20 10 5 2 1 0.5))
(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? coin-values)
  (null? coin-values))
(define (except-first-denomination coin-vlaues)
  (cdr coin-vlaues))
(define (first-denomination coin-values)
  (car coin-values))

(cc 100 us-coins)
(display "*****************************")
(newline)


;: 练习 2.20
(define (filter check? items)
  (cond ((null? items) '())
        ((check? (car items))
         (cons (car items)
               (filter check? (cdr items))))
        (else
         (filter check? (cdr items)))))

;:::(filter odd? (list 1 2 3 4 5 6 7 8 9))

(define (same-parity first . items)
  (let ((check? (if (odd? first) odd? even?)))
    (cons first (filter check? items))))
;: 测试
(same-parity 1 2 3 4 5 6 7)
(same-parity   2 3 4 5 6 7)

版权声明:知行合一

相关文章推荐

离散数学实践:关系的性质判断&关系的幂&关系的传递闭包

二元关系类 成员变量: 指向存储在一维数组中的关系矩阵的指针p; 矩阵的阶数;     //在构造函数中手动输入 成员函数: √ 重载构造函数(无参数);     //运行时手动输入参数进行初始化  ...

Swift2.2 学习笔记(三) ___函数和闭包

欢迎使用Markdown编辑器写博客本Markdown编辑器使用StackEdit修改而来,用它写博客,将会带来全新的体验哦: Markdown和扩展Markdown简洁的语法 代码块高亮 图片链接和...

Swift2.2 学习笔记(十四) ___闭包

闭包 闭包可以捕获和存储其所在上下文中任意常量和变量的引用。这就是所谓的闭合并包裹着 这些常量和变量,俗称闭包。 在 函数 章节中介绍的全局和嵌套函数实际上也是特殊的闭包,闭包采取如下三种形式之 一:...

Java闭包练习

  • 2016年03月30日 11:54
  • 3KB
  • 下载

传递闭包算法

  • 2017年08月23日 15:37
  • 285B
  • 下载

闭包简单练习及分析

题目简述编写十个button,内容分别是1到10,点击其中的一个button则输出当前的序号,即点击1输出1。 解题思路这里的十个button样式都是一样的,只是内容不同,显然使用js动态添加较为方便...

js闭包实例

  • 2016年12月17日 17:17
  • 84KB
  • 下载

swift_函数和闭包

  • 2016年04月22日 17:47
  • 8KB
  • 下载

js 匿名函数和闭包函数(js练习)

1、首先(保证页面引入了jQuery)创建 2、js创建ul和li标签,并且添加ul标签在body里面...

闭包与回调代码

  • 2015年01月28日 21:09
  • 549B
  • 下载
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:2.2 层次闭包性质 练习 2.17 2.20
举报原因:
原因补充:

(最多只允许输入30个字)