编程基础与程序结构

some intro :

(消除)重复(代码):

  1. 通过循环结构
  2. 通过抽象(abstraction)
  3. 数据过滤

数据抽象

ex:考虑有理数约化到最简形式

Tips:

cons函数是一种用于构建pair(对)的基本函数,它接受两个参数,返回一个由这两个参数构成的pair。

具体来说,cons函数的语法是 (cons x y),其中x和y可以是任何类型的值,包括数字、符号、字符串、列表等。调用cons函数会返回一个pair,其中第一个元素是x,第二个元素是y。这个pair可以用于表示二元组、坐标点、树等各种数据结构,是Scheme语言中非常基础和重要的一种数据类型。

例如,可以使用cons函数构建一个由两个数字构成的pair:

这个表达式会返回一个pair,其中第一个元素是1,第二个元素是2,表示一个二元组。可以使用car和cdr函数分别获取这个pair的第一个和第二个元素:

cons函数也可以用于构建链表等数据结构,例如可以使用cons函数构建一个包含三个元素的列表:

这个表达式会返回一个包含三个元素的链表,它的第一个元素是1,第二个元素是一个包含两个元素的链表(2, 3),第三个元素是一个空列表。可以使用car和cdr函数逐步获取这个链表中的元素:

在Scheme语言中,cons函数是非常基础和常用的函数,可以用于构建各种复杂的数据结构。

Implements

(define ( make-rat n d)

(let ( ( g (gcd n d)))

(cons (/ n g) (/ d g))))

链表

(list 1 2 3 4)

= (cons 1 (cons 2(cons 3 (cons 4 nil))))

List-ref

(define (list-ref items n)

(if ( = n 0)

(car items)

(list-ref (cdr items) (- n 1))))

scale-list

(define (scale-list items factor)

(if (null? items)

nil

(cons (* (car items) factor)

(scale-list (cdr items) factor))))

(Tips

cdr是一种基本的操作符,通常用于获取一个pair(即由两个元素组成的列表)的第二个元素,或者获取一个列表除第一个元素外的所有元素。具体来说,cdr函数会返回一个pair或列表的cdr(即第二个元素或去掉第一个元素后的剩余部分)

car是一种基本的操作符,通常用于获取一个pair(即由两个元素组成的列表)的第一个元素,或者获取一个列表的第一个元素。具体来说,car函数会返回一个pair或列表的car(即第一个元素)。

)

map

(define (map proc items)

(if (null? items)

nil

(cons (proc (car items))

(map proc (cdr items)))))