2021/11/2 paradigm 笔记

这篇笔记探讨了Scheme语言中的嵌套列表遍历,使用cond进行条件判断,递归实现flatten函数。此外,讲解了如何判断列表是否有序,通过car和cdr操作,以及比较运算符。还介绍了scheme中的map、eval和apply函数,特别是apply在求平均值和flatten列表中的应用。同时,提到了lambda表达式和let形式在函数定义和返回值中的作用,强调了Scheme语言在抽象和算法设计上的优势。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1 嵌套列表结构的遍历

if … else … 的注意事项:
在这里插入图片描述

1.1 cond

cond是if…else… 的扩展,能够级联实现if… else if… else…
在这里插入图片描述

1.2 递归实现flatten函数

(define (flatten sequence)
      (cond ((null? sequence) '())
            ((list? (car sequence))
                    (append (flatten (car sequence))
                            (flatten (cdr sequence))))
            (else (cons (car sequence)
                        (flatten (cdr sequence))))))

在这里插入图片描述

2 判断list是否有序

2.1 car和cdr的最多四级级联

在这里插入图片描述

2.2 判断列表是否升序

(define (sorted? num-list)
    (or (< (length num-list) 2)
        (and (<= (car num-list)
                 (cadr num-list))
             (sorted? (cdr num-list)))))

在这里插入图片描述
在这里插入图片描述

加入"接口"
(define (sorted? seq cmp)
    (or (< (length seq) 2)
        (and (cmp (car seq)
                  (cadr seq))
             (sorted? (cdr seq) cmp))))

在这里插入图片描述

2.3 关于list的比较运算符

在这里插入图片描述

3 scheme中函数指针等价物?

3.1 map

在这里插入图片描述
在这里插入图片描述

在这里插入图片描述

3.2 eval

在这里插入图片描述

3.3 apply

在这里插入图片描述

3.3.1 apply实现对list求平均值

在这里插入图片描述

3.3.2 apply实现flatten

(define (flatten seq)
    (if (not (list? seq)) (list seq)
        (apply append (map flatten seq))))

在这里插入图片描述

scheme几乎只有运行时间,没有编译时间,是弱输入型语言,运行的时候才会检查输入是否正确!

4 lambda

4.1 大小写转换函数translate

字符ascⅡ码值
a-z97-122
A-Z65-90

‘A’ + 32 = ‘a’

(define (translate points delta)
    (map (lambda (x)
           (+ x delta))
         points))

在这里插入图片描述

在这里插入图片描述
在这里插入图片描述

在这里插入图片描述

4.2 power set

列出一个list的所有子集

(define (ps set)
    (if (null? set) '(())
        (append (ps (cdr set))
          (map (lambda (subset)
                 (cons (car set) subset))
               (ps (cdr set))))))

在这里插入图片描述

5 let 类似return value

在这里插入图片描述

6 lambda和let的关系

在这里插入图片描述

相比于C、C++等语言,scheme可以让你更关注抽象概念和算法!

在C、C++里面,你还需要关注变量的声明、内存分配等问题!

paradigms 22、23、24 听得好晕

回头再学这个把!!!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值