SICP list
来源:互联网 发布:用友软件的功能 编辑:程序博客网 时间:2024/05/22 02:29
(define (panduan a k) (= (remainder a 2) k))(define (same-parity a . b) (define (selc k result b) (cond ((null? b) result) ((panduan (car b) k) (selc k (append result (list (car b))) (cdr b))) (else (selc k result (cdr b))) )) (if (= (remainder a 2) 1) (selc 1 (list a) b) (selc 0 (list a) b) ))
1、define (same-parity a . b)
. b 在这里到底表示什么?
比如(same-parity 2 3 4 5 6 )
a = 2;
b=(list 3 4 5 6)
可以用DrRacket来debug,会看到:
selc => #<procedure:selc>b => {3 4 5 6}a => 2b => (3 4 5 6)
这里:
define (selc k result b)
进入selc函数,传进去的是:
k => 0result => {2}b => {3 4 5 6}进入selc函数中的参数如上:selc => #<procedure:selc>b => {3 4 5 6}a => 2b => (3 4 5 6)
这样看,好像没什么不对哦?代码确实没错。
不过我之前对list和 . b等并不是特别深刻,所以代码对define selc写成了这个样子:
define (selc k result . b)
没错,我那会认为传进去的b肯定是个list 得加个” . ” 。
然后就出错了,我觉得更有意义的是debug出现的这一幕:
b => {{3 4 5 6}}k => 0result => {2}b => ({3 4 5 6})selc => #<procedure:selc>b => {3 4 5 6}a => 2b => (3 4 5 6)
跟之前正确的程序的调试信息相比,b好像多了一个大括号。区别就在于此!仔细体会吧,说不太清楚。有种加了个“ . ”就是加上一层大括号的味道。
其他list相关:
null? list_name
append list1 list2
(cons 2 (list 4 5 ))
(map proc list)
0 0
- SICP list
- [读书笔记]P96 list (p96 SICP)
- SICP 习题2.18 reverse-list
- SICP 习题2.21 square-list
- sicp
- SICP
- SICP 习题 (2.26)解题总结:列表操作符append cons list
- sicp-1
- SICP参考资料
- SICP习题
- SICP HASKELL
- SICP 1.7
- SICP 1.11
- SICP 第一章
- SICP HuffmanCode
- SICP PolySystem
- SICP banksystem
- SICP Montecarlo
- 我在这记录我的“安卓程序员”开发之路
- 技术债务可能是这样来的
- Leetcode - Add Binary
- 笔记-->关系操作符 ==
- 如何让自己内心强大起来 [转]
- SICP list
- Spring MVC事务配置
- 基础级-图形验证码
- 【BZOJ1014】火星人prefix Splay 字符串Hash
- Nginx负载均衡配置实例详解
- Java基础篇(内部类,匿名类,匿名内部类)
- 序列化
- 分布式并行数据库将在OLTP 领域促进去“Oracle”
- LeetCode(63)-First Bad Version