当前位置: 首页 > news >正文

The little schemer 学习

参考文章:

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系语言的enum;quoted数字原子的结果仍然是数字;quoted list的结果就是不求值的列表,类似于链表这样的结构。

第二章  处理,处理,反复处理

本章从lat?函数的实现出发,探讨递归处理lat的基本思想和方法。

定义过程lat?,用来判断表的子表达式是否都是原子,即判断list是不是lat(list 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 终结者

http://www.lryc.cn/news/185071.html

相关文章:

  • yolov5+bytetrack算法在华为NPU上进行端到端开发
  • 【Java-LangChain:使用 ChatGPT API 搭建系统-1】简介
  • BJT晶体管
  • ORACLE中SQL运算符的优先级
  • springboot和vue:十一、Axios网络请求的安装引入与使用、跨域问题解决(CORS)
  • 外汇天眼:真实记录,投资者在盗版MT4平台SCE Group上做交易的经历!
  • FFmpeg 命令:从入门到精通 | ffmpeg 命令视频录制
  • html 笔记:CSS
  • 【LeetCode - 每日一题】901. 股票价格跨度(23.10.07)
  • 第二证券:突发!A股T+0?刚刚,紧急回应!
  • ShardingSphereJDBC5.4.0支持Nacos配置(SpringCloud版)
  • 基于SSM的学院学生论坛系统的设计与实现
  • Unity记录5.4-地图-带种子的柏林噪声
  • 阅读论文:Label-Free Liver Tumor Segmentation
  • leetcode64 最小路径和
  • 金盘图书馆微信管理后台信息泄露漏洞 复现
  • nginx实现负载均衡(三)
  • Android---深入理解ClassLoader的加载机制
  • 超自动化加速落地,助力运营效率和用户体验显著提升|爱分析报告
  • Linux posix_spawn和fork的区别
  • 聊聊分布式架构02——Http到Https
  • 1024 画跳动的爱心#程序代码 #编程语言 #计算机
  • 【排序算法】堆排序详解与实现
  • java Spring Boot整合jwt实现token生成
  • 如何使用Git和GitHub进行版本控制
  • 彻底解决 WordPress cURL error 28 错误
  • LLM项目代码改写
  • 小谈设计模式(14)—建造者模式
  • 【kubernetes】k8s中的选主机制
  • 学生选课系统基础版