Schemer符号编程极简语言:讲解递归概念的最佳编程语言

以下尽可能全是大白话,不是大白话请爸爸抽我。

不过这种天书一样的文章竟然被转载了,真是让我情何以堪

一、各种符号介绍

atom原子:可以是字母、单词、数字、特殊字符及其他组成的字符串(除了"()"符号)

list列表:用括号括起来的原子集合("()是一个列表,叫空列表,但空列表不包含列表,这句话困扰了我很久")

collection集合:去掉括号的列表

所有的原子和列表都是'S-表达式'

car(咔尔)基本元件:列表内第一个'S-表达式',表达式为l = (a b c) (car l) = (a)

cdr(咔哒)基本元件:列表内除了咔尔外的其他'S-表达式'的集合l = (a b c) (cdr l) = (b c)

Ps. l = (a) (car l) = (a) (cdr l) = ()为空列表

cons基本元件:合并一个'S-表达式'到一个列表的第一位,表达式cons a (b xc) = (a b c)

null?基本元件:判断一个列表是否为空列表,表达式(null? x) ,x = (),结果为True。(null?必须且只能判断列表是否为空)

atom?:判断'S-表达式'是否是一个原子,表达式(atom? x),x = abc ,结果为True。

eq?:判断两个非数字的原子是否相同,表达式(eq? a a),结果为True。

二、尝试初级递归^^

lat?:判断列表中每个'S-表达式'是否不包含列表,表达式(l = (a b)) (lat? l)结果为True;(l = ()) (lat? l)结果为True,因为l不包含列表

cond... 为程序定义问题

lambda... 创建一个函数(创建变量)

define... 为函数命名(展示即将使用的函数)

我们来个小例题:

l = (bacon and eggs) 求(lat? l)的结果为?

(define lat?

(lambda (l)

(cond

((null? l) #t)

((atom? (carl))(lat? (cdr l)))

(else #f)

)))

其结果最终为#t,你算出来了吗?

or... 询问两个及以上问题,有一个问题结果为t,其最终结果即为t。表达式a = (a b c) b = () (or (null? a) (null? b)),结果为t。

member?:确认第一个值是否被第二个值包含。表达式(a = x) (b = (x y z)) (memaber? a b) ,结果为t。

三、cons构筑恢弘(这狗屁作者在说什么?请原谅我无法理解这个标题)

rember:将一个列表内第一个此原子剔除,如果没有此原子则列表不变。表达式a = (x) b = (z y x q s x z) (rember a b) = (z y q s x z)。

未完待续

全文引用《The Little Schemer》作者:Daniel P. Friedman 、 Matthias Felleisen

参考文章

评论可见,请评论后查看内容,谢谢!!!评论后请刷新页面。