Scheme 介绍

2023-11-01

最近一直在看 sicp 这本书,准备写点读书笔记,这篇当作是对 Scheme 语言的介绍,毕竟全书是用这门语言写的。

下面是我对书中使用的 mit-scheme 的一些理解,我没有正统学习过函数式或类 Lisp 语言,只有一些我自己在做这本书习题时的一些理解,文中表述可能不会太专业,请谅解。

Expressions

basic

(+ 1 2)

; 3
复制代码

compound

(* (+ 1 2)
   (+ 3 4))
   
; 21

复制代码

Variables

(define pi 3.14159)
(define radius 10)

(* pi (* radius radius))

; 314.159

复制代码

Procedure

; 定义 square 过程
(define (square x) (* x x))

; 调用 square 过程
(square (square 3))

;81
复制代码

Condition

cond

(define (abs x)
  (cond ((> x 0) x)
        ((= x 0) 0)
        ((< x 0) (- x))))

(abs -42)
; 42

(define (abs x)
  (cond ((< x 0) (- x))
        (else x)))

(abs -42)
; 42

复制代码

比较有趣的是,在 mit-scheme 里,变量,过程等是可以同名的,会选用最后的定义,所以上述代码是完全可以运行的。

if

(define (abs x)
  (if (< x 0)
      (- x)
      x))

(abs -42) 
; 42

复制代码

Logic

;; e Expression

(and <e1> <e2>)

(or <e1> <e2>)

(not <e>)

(and (> x 5) (< x 10))
复制代码

Lambda

无名字 procedure(其他语言也有叫做匿名函数),可作为 procedure 的参数传递,返回。

(define (inc x)
  (+ x 1))

;; 返回一个名字为 double 执行 proc 两次的 lambda
(define (double proc)
  (lambda (x)
    (proc (proc x))))


((double inc) 5)   

; 7
复制代码

Variable binding

let

(let ((x 10)
      (y 5))
  y)

; 5

;; reference binding
(let ((x 10))
  (let ((y (+ x 6)))
    y)) 
    
; 16

;; 用 let 会报错,因为在一个 let expression 里不能引用前面的 bindings
;; 使用 let*
(let ((x 10)
      (y (+ x 6)))
  y)
  
;Unbound variable: x
复制代码

let*

(let* ((x 10)                                                                                                    
       (y (+ x 6)))
  y)

; 16
复制代码

Data Structures

Pairs

(define x (cons 1 2))

(car x)
1

(cdr x)
2
复制代码

List

;; 下面两个等价

(list 1 2 3)

;Value: (1 2 3)
 
;; '() 表示空 list,相当于 nil
(cons 1 (cons 2 (cons 3 '())))

;Value: (1 2 3)
复制代码

Symbol

symbol 是以 ' 开头的字符,是不带语义的变量。

;; define a symbol
'apple

; apple

;; 空 list
'() 

; ()

;; list of symbol
(list 'a 'b 'c) 

; (a b c)

;; 可以简写成
'(a b c)

;(a b c)
复制代码

equal

;; symbol equality
(eq? 'apple 'apple))

; #t

;; return sublist of the list beginning with the first occurrence of the symbol
(memq 'apple '(x (apple sauce) y apple pear)) 

; (apple pear)
复制代码

待续

转载于:https://juejin.im/post/5cf4acfd518825473b4fbf54

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Scheme 介绍 的相关文章

  • Qt绘图控件QCustomPlot: (一)安装及使用

    一 目录 一 介绍 二 下载及配置环境 三 建立工程 四 基础画图 一 介绍 QCustomPlot是一个Qt c 小控件 用于绘图和数据可视化 它没有其它的依赖关系 并且有很好的帮助文档 这个绘图库专注于制作好看的 高质量的2D绘图 图形
  • vue(五)组件、自定义属性props

    一 组件化开发 组件化开发指的是 根据封装的思想 把页面上可重用的 UI 结构封装为组件 从而方便项目 的开发和维护 vue 是一个支持组件化开发的前端框架 vue 中规定 组件的后缀名是 vue App vue 文件 本质上就是一个 vu
  • 竞速榜实时离线对数方案演进介绍

    一 背景 竞速榜是大促期间各采销群提供的基于京东实时销售数据的排行榜 同样应对大促流量洪峰场景 通过榜单撬动品牌在京东增加资源投入 竞速榜基于用户配置规则进行实时数据计算 榜单排名在大促期间实时变化 相关排名数据在微博 朋友圈广泛传播 相关
  • android 日历开发附源码(附源码)

    这里主要记录一下在编写日历apk过程中一些主要的点 先看下效果图 一 主要功能 1 支持农历 节气 常用节假日 2 使用数据库 设置计划 二 基本结构 我们要实现的日历控件采用GestureDetector构造器 使用OnGestureLi
  • 《ImageNet Classification with Deep Convolutional Neural Networks》——AlexNet论文整理

    题目 ImageNet Classification with Deep Convolutional Neural Networks 简介 AlexNet属于一个更大更深的LeNet 改进有以下三点 增加了dropout层 丢弃层 激活函数
  • 【华为OD统一考试A卷

    华为OD统一考试A卷 B卷 新题库说明 2023年5月份 华为官方已经将的 2022 0223Q 1 2 3 4 统一修改为OD统一考试 A卷 和OD统一考试 B卷 你收到的链接上面会标注A卷还是B卷 请注意 根据反馈 目前大部分收到的都是
  • 硬盘再生器和mhdd相比_让小白变高手,硬盘维修的三大工具简单、实用

    在我们平时使用电脑中经常会遇到 系统突然奔溃 然而自己确实是什么都没干系统就坏了这让很多人摸不着头脑到底是自己弄得还是系统哪里坏了 其实不然像这种情况大多数情况下都是硬盘不稳定而导致的系统文件丢失而不能启动系统 最多情况的就是注册表丢失 开
  • 启动hbase出现Java HotSpot(TM) 64-Bit Server VM warning

    分布式hbase启动异常提醒 分布式hbase启动过程出现Java HotSpot TM 64 Bit Server VM warning提醒异常 主要是因为使用的JAVA JDK版本问题 JDK8 以上的版本不需要如下图所示的红框内的两行
  • 讲述deployment、service、ingress资源的lables关系

    在实验之前 我们都知道 lable是k8s中内部找寻各个资源的依据 比如deployment需要跟那个pod资源进行绑定 通过lable service资源如何跟pod资源进行绑定 通过lable service资源如何跟service资源
  • Fabric区块大小的实验

    首先记录已在账本的大小 见下图 大小是319784字节 修改peer的源代码 将区块写入文件时 输出新区块的大小 编译peer并替代原来的peer 重新启动节点 在终端上记录区块高度 调用智能合约的链码函数 产生一个新区块 账本大小变为32
  • Java中堆和栈创建对象的区别

    栈与堆都是Java用来在Ram中存放数据的地方 与C 不同 Java自动管理栈和堆 程序员不能直接地设置栈或堆 Java的堆是一个运行时数据区 类的对象从中分配空间 这些对象通过new newarray anewarray和multiane
  • AI2019下载Adobe Illustrator CC2019安装教程

    Illustrator 简称 AI 是一款非常强大的矢量图制图软件 在平面设计 UI设计 广告设计等诸多行业都有广泛的应用 并且作为必备软件有它的不可替代性 但很多朋友在开始安装AI软件的时候却遇到种种困难 为此 我亲自录制了安装教程 也分
  • ios开发问题记录记录

    1 提示 usr include c v1 threading support 457 11 error build Use of undeclared identifier nanosleep 原因 header search paths
  • C++ deque的总结

    deque 1 deque是什么 deque 发音类似 deck 是双端队列不规则的首字母缩写 双端队列是动态大小的序列式容器 其可以像两端进行伸缩 特定的库可以以不同的方式实现deque 但通常都是一种动态数组 不论在何种情况下 它都允许
  • npm安装两个相同的库方法

    特殊情况下一个node项目中我们需要安装两个相同的库 package json devDependencies demoA vue auto routing npm vue auto routing 1 0 1 目录名 库名 指定npm库版
  • MTU的测量方法

    MTU的测量方法 MTU是Maximum Transmission Unit的缩写 意思是网络上传送的最大数据包 MTU的单位是字节 大部分网络设备的MTU都是1500 如果本机的MTU比网关的MTU大 大的数据包就会被拆开来传送 这样会产
  • 淋巴结病理数字玻片读取与处理代码

    更多数学原理小文请关注公众号 未名方略 Whole slide images are generally stored in a multi resolution pyramid structure 首先安装openslide模块
  • 如何用魔法提示词打破 Code Interpreter 修改代码的「鬼打墙」?

    注 本文为小报童精选文章 已订阅小报童或加入知识星球 玉树芝兰 用户请勿重复付费 需求 最近我喜欢上了用 Claude 2 而不是 GPT 4 来润色文章 最主要的原因是 Claude 2 100K 的 tokens 长度 实在是优势显著
  • 21天 Jenkins打卡-Day1 环境准备

    第1天作业 1 确保自己已经有一台Linux服务器 且通过SSH客户端 SecureCRT Xshell 等都可以 链接上服务器 2 你的服务器发行版 Centos Ubuntu 等 3 在你的Linux服务器上 安装jdk8 4 验证安装
  • vue结合el-dialog 封装自己的confirm二次确认弹窗

    这里使用el dialog 主要是用他的关闭动画 让关闭更加丝滑 首先在components 添加 ConfirmAlert文件夹 然后添加vue和js 文件 index js import Vue from vue import conf

随机推荐

  • pi控制直流电机c语言,一种基于PI控制的直流电机调速控制系统及控制方法与流程...

    本发明属于传感器技术领域 具体涉及种一种基于PI控制的直流电机调速控制系统及控制方法 背景技术 直流电机有广泛的应用 如何控制和调整电机的转速是工程和实验领域要解决的问题之一 通常采用PWM波控制电机的转速 根据PWM波的占空比调整电机的转
  • java基础案例4-4学生和老师

    package com itheima import java util Scanner abstract class Person void speak class Teacher extends Person private Strin
  • 查看浏览器token

    很简单
  • QT进行http请求(post/get)

    在刚接触QT时第一个任务就是进行http请求 现在才开始记录 可能会有遗漏的点 一 post请求 在 pro文件中 QT network 在 h文件中添加对应的头文件 include
  • 通用业务平台设计(五):预警平台建设

    前言 在上家公司 随着业务的不断拓展 从支持单个国家单个主体演变成支持多个国家多个主体 对预警的诉求越来越紧迫 如何保障业务的稳定性那 预警可以帮我们提前甄别风险 从而让我们可以在风险来临前将其消灭 每个业务组写自己的报警规则会极大的降低开
  • 【基于springboot + vue 的作业管理系统的设计与实现】

    获取 http mtw so pwd 6fSSgK 密码 123456 本文介绍了一个基于springboot vue 的作业管理系统的设计与实现 该系统主要包括学生端和教师端两个模块 学生端可以查看作业要求 上传作业文件 查看作业成绩和评
  • CPU性能测试项

    CPU性能测试项 一 思维导图 二 CPU简介 中央处理器 CPU 是电子计算机的主要设备之一 电脑中的核心配件 其功能主要是解释计算机指令以及处理计算机软件中的数据 CPU是计算机中负责读取指令 对指令译码并执行指令的核心部件 中央处理器
  • 2021年认证杯-数学建模

    认证杯 2021年数学建模网络挑战赛 认证杯的含金量其实还算数学建模里较高的 获奖证书上是全国比赛 而非赛区 比赛分为第一阶段和第二阶段 还会有全球数学建模能力认证中心 中国运筹学会 内蒙古自治区数学学会的盖章认可 建议大家去踊跃报名 如果
  • PCIE总线基本介绍(和PCI总线差异、速率计算、引脚定义)

    1 PCI和PCIE的差异 1 PCIE协议在软件编程上是兼容PCI协议 不同在于PCIE和PCI的控制器 2 PCIE是差分串行信号线 PCI是电平并行信号线 3 PCI协议使用INTA INTB INTC INTD 四根中断线来触发终端
  • openGL之API学习(九十五)glProgramBinary

    将着色器程序的二进制数据加载进着色器程序 二进制数据由glGetProgramBinary生成 使用二进制数据可以避免编译开销 并且不用呈现shader的源代码 OpenGL并不指定任何二进制格式 二进制格式完全由各个实现的供应商决定 这意
  • 常见的浏览器css和js兼容性问题汇总

    无论是在工作或者面试中 总会遇到关于浏览器兼容性的问题 往往会感到一头雾水不知从何说起 于是我结合一些工作经验及从网上搜集的一些资料对此做了一些汇总 希望对从事前端工作的朋友们起到一些帮助 css 1 初始化样式 由于浏览器对标签的默认支持
  • 公司刚来的00后真卷,上班还没2年,跳到我们公司起薪20k....

    都说00后躺平了 但是有一说一 该卷的还是卷 这不 前段时间我们公司来了个00后 工作都没两年 跳槽到我们公司起薪18K 都快接近我了 后来才知道人家是个卷王 从早干到晚就差搬张床到工位睡觉了 最近和他聊了一次天 原来这位小老弟家里条件不太
  • VLOG旅游类短视频如何通过抖音进行变现?运作模式有什么精髓之处?不妨了解下

    旅行日渐成为大众生活中不可或缺的一部分 大众除了利用常规拍照 拍视频的方式 来记 录旅程 volg 也走入大众视线以及短视频舞台中心 打开抖音 你能频繁刷到关于旅行 美食 学习 日常等各种主题的 vlog 博主账号 抖音 是现在年轻人每天不
  • EchartsBar 双柱状图显示数据

    需求 两组数据柱状图无缝对比 柱状上方显示数字 X轴无刻度线 背景轴线虚线指定颜色 图表代码 barChart myChart date bar1Data bar2Data myChart setOption legend 图例组件的位置
  • Cron表达式详解(配合例子)

    这里写目录标题 Cron 表达式 1 基本格式 2 一些特殊值的含义 四种 通用 特殊字符 五种有使用限制的特殊字符 L W LW 3 各个域的取值范围 Cron 表达式 在进行定时任务的创建的时候 cron是计划任务的表达式 本文意在快速
  • element table cell-style设置

    当表格中某行或者某个文字 需要单独设置 在表格table中加入 cell style cellStyle
  • 甲骨文全区登录地址

    日本东部 东京 https console ap tokyo 1 oraclecloud com https console ap tokyo 1 oraclecloud com 日本中部 大阪 https console ap osaka
  • 调试最长的一帧(第22天)

    先看看全流程 先抄一抄节点访问器NodeVisitor的工作原理 当我们执行节点的accept NodeVisitor nv 函数时 当前节点自动调哟个NodeVisitor apply方法 将自身的信息传递给节点访问器nv 由它负责执行相
  • python matplotlib.pyplot画图设置刻度

    https jingyan baidu com article 7e44095324e4062fc1e2ef76 html
  • Scheme 介绍

    最近一直在看 sicp 这本书 准备写点读书笔记 这篇当作是对 Scheme 语言的介绍 毕竟全书是用这门语言写的 下面是我对书中使用的 mit scheme 的一些理解 我没有正统学习过函数式或类 Lisp 语言 只有一些我自己在做这本书