您的位置:首页 > 其它

练习2.21 2.23

2016-06-01 16:16 281 查看
#lang racket
;: 练习 2.21

(define nil '())

(define square
(lambda (x) (* x x)))

#|
(define (square-list items)
(if (null? items)
nil
(cons (square (car items))
(square-list (cdr items)))))

(define (square-list items)
(map square items))

|#

;: 练习 2.22

#|
(define (square-list items)
(define (iter things answer)
(if (null? things)
answer
(iter (cdr things)
(cons (square (car things))
answer))))
(iter items nil))

(square-list '(1 2 3 4)) ;: 输发顺序相反,为什么?展开一下:
(iter '(1 2 3 4) nil) =>
(iter '(2 3 4) (cons 1 nil)) =>
(iter '(3 4) (cons 4
(cons 1 nil))) =>
(iter '(4) (cons 9
(cons 4
(cons 1 nil)))) =>
(iter nil (cons 16
(cons 9
(cons 4
(cons 1 nil))))) =>
(cons 16 (cons 9 (cons 4 ( cons 1 nil)))) =>
'(16 9 4 1)
|#
#|
(define (square-list items)
(define (iter things answer)
(if (null? things)
answer
(iter (cdr things)
(cons answer (square (car things))
))))
(iter items nil))

(square-list '(1 2 3 4)) ;: 输发顺序相反,为什么?展开一下:
=>
(iter '(2 3 4) (cons nil
1))
=>
(iter '(3 4) (cons (cons nil
1)
4))
=>
(iter '(4) (cons (cons (cons nil
1)
4)
9))
=>
(cons (cons (cons (cons nil
1)
4)
9)
16)
=> '((((() . 1) . 4) . 9) . 16)
|#

;: 练习2.23
;(define (for-each proc item)
;  (map proc item))

(define (for-each proc items)
(if (not (null? items))
(begin
(proc (car items))
(for-each proc (cdr items)))
nil)) ;: 这个是else 部分。。。 在racket 语言中,必须要有。。

(for-each display '(1 2 3 4))
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: