公司网站域名更改怎么做,上海有名的网站建设公司,wordpress加视频,哈尔滨市工程信息网参考文章#xff1a;
The Little Schemer 阅读笔记-CSDN博客
前言
原子是Scheme的基本元素之一。首先定义了过程atom?#xff0c;用来判断一个S-表达式是不是原子#xff1a;
(define atom?(lambda (x)(and (not (pair? x)) (not (null? x)))))
这个“pair”实际上…参考文章
The Little Schemer 阅读笔记-CSDN博客
前言
原子是Scheme的基本元素之一。首先定义了过程atom?用来判断一个S-表达式是不是原子
(define atom?(lambda (x)(and (not (pair? x)) (not (null? x)))))
这个“pair”实际上就是list.
但是需要注意pair和list是两码事。pair在表达上是诸如(1 . 2)这样用点分隔开的二元组。
第一章
S-表达式包括①原子atom②列表list。
car取非空列表的第一个S-表达式。
cdr取非空列表list的 除(car list)的剩余所有元素 组成的 列表。
cons将某个S-表达式 添加到 某个列表的开头。
null? 判断S-表达式是否是空列表。
eq? 判断两个S-表达式是否相同。
list的默认解析方式是以car为函数名以cdr为参数列表对函数进行调用整个list的evaluated的结果就是函数的返回值。某些“关键字”作为car时求值规则会发生变化这个要具体问题具体分析。这个问题可以参考SICP的练习1.6。“关键字”很少并不复杂
quote 或者 用来抑制对S-表达式的求值。由于S-表达式是递归结构因此被抑制求值的S-表达式的各个子表达式都不会被求值。被quote的部分是作为“数据”的代码。quoted原子的结果是它本身类似于C系语言的enumquoted数字原子的结果仍然是数字quoted list的结果就是不求值的列表类似于链表这样的结构。 第二章 处理处理反复处理
本章从lat?函数的实现出发探讨递归处理lat的基本思想和方法。
定义过程lat?用来判断表的子表达式是否都是原子即判断list是不是latlist of atoms。第五章之前涉及到的列表基本上都是lat。
(define lat?(lambda (list)(cond ((null? list) #t)((atom? (car list)) (lat? (cdr list)))(else #f)))
特殊形式cond是惰性的也就是说如果某个子句的谓词为真则不再检查下面的子句。
定义过程member?用来判断某个原子是否为某个lat的成员。这个函数很重要尤其是对于实现集合的第七章。
(define member?(lambda (x lat)(cond ((null? lat) #f) ;找遍列表也没找到((eq? x (car lat)) #t)(else (member? x (cdr lat)))))) 第三章
直接看参考文章吧总结的很到位了 第九章 lambda 终结者