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)

版权声明:知行合一

2.2层次性数据和闭包性质

计算机程序的构造和解释(笔记) 2.2层次性数据和闭包性质
  • ferris_chan
  • ferris_chan
  • 2017年11月10日 16:39
  • 33

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

1、首先(保证页面引入了jQuery)创建 2、js创建ul和li标签,并且添加ul标签在body里面...
  • dongfanglanyi
  • dongfanglanyi
  • 2016年03月27日 19:22
  • 645

最简单易懂的闭包

一、作用域      js特有的作用域,内部函数可以访问外部函数的参数和变量,这个很美妙哦!      但是有时我们需要验证一个变量或属性的类型时,他就会自动向上查找直到原型,如果有则返回,如果没有则...
  • Alin_leeon
  • Alin_leeon
  • 2016年09月20日 00:40
  • 880

【Python】闭包中一个不易察觉的陷阱

Python语言是支持函数式编程的,我们可以在一个函数的函数体中定义另一个完整的函数,甚至返回这个函数.在函数内部定义的函数和外部定义的函数是相同的,唯一的区别就是在函数内部定义的函数是不能被外部访问...
  • lchad
  • lchad
  • 2015年02月27日 15:52
  • 3833

Go指南练习之《斐波纳契闭包》(Fibonacci closure)

Go官网指南 练习原文 现在来通过函数做些有趣的事情。 实现一个 fibonacci 函数,返回一个函数(一个闭包)可以返回连续的斐波纳契数。 关键信息 闭包函数会引用函数体以外的值,可...
  • qq_27818541
  • qq_27818541
  • 2017年01月16日 09:47
  • 1149

Python中的闭包实例详解

本文转载 原作者:投稿:shichen2014 链接:http://www.jb51.net/article/54498.htm 这篇文章主要介绍了Python中的闭包,针对闭包的定义、用法及...
  • tao01230
  • tao01230
  • 2015年05月25日 18:37
  • 1688

函数调用返回值是一个闭包

/  返回值类型数据函数返回值                  \返回闭包函数(引用类型数据)函数返回值是一个闭包函数,就是引用类型的数据。则每一次调用该函数,都会创建一个内存空间。如果函数返回值是...
  • qq_26222859
  • qq_26222859
  • 2016年10月20日 00:07
  • 865

什么是闭包,我的理解

原文链接   [收藏]     首先,我觉得,一个概念,如果不理解也不影响使用的话,那么,就没必要去理解它、去学习它。闭包就是这样一个概念,你不理解它也能很好的用它。俺这两年写as3程序...
  • Linux7985
  • Linux7985
  • 2015年03月05日 11:18
  • 2061

javascript -function- 函数从基本到闭包详解

1)函数定义、 函数:一种代码的分组形式,可以通过这种形式赋予某组代码一个名字,以便日后重用时调用。2)、函数组成、 a. function 子句(数据类型)。 b. 函数名字,也可以没有函数,...
  • hejunpochen
  • hejunpochen
  • 2016年05月11日 20:11
  • 2478

图-传递闭包

图的传递闭包是指修正后的邻接矩阵表示的图。(见Graph 图-邻接矩阵法 ) 在多个顶点的有向图中,每个顶点可以到按照方向到达一定的节点,这叫图的连通性。有种方法直接告诉我们,图中的两个节点是否...
  • xiyf2046
  • xiyf2046
  • 2013年10月14日 14:36
  • 836
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:2.2 层次闭包性质 练习 2.17 2.20
举报原因:
原因补充:

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