Schemer递归

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

如下尽量全是大白话,不是大白话请爸爸抽我。编程

1、各类符号介绍

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。编程语言

2、尝试初级递归^^

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。atom

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