Scheme自学教程 2

【Scheme】Scheme 编程学习(一) —— 概述 Scheme 是一种编程语言是 Lisp 语言一种变体。在 1975 年由 Guy Steele 与 Gerry Sussman 在 麻省理工的 (Artificial Intelligence lab) 人工智能实验室中发明。它是 Lisp 的第一个要求其实现使用尾调用优化,并着重于函数式编程和递归算法的方言。Scheme 编程语言采用极简主义的设计理念,指定一个小的标准核心,并提供强大的语言扩展工具。它广泛用于教育和科学组织,尤其是在人工智能领域。 阅读详情
导读:
  由 stelee 于 周日, 11/18/2007 - 09:06 提交。programming
   Scheme自学教程 2
   第三章 代码块(Forms)
  读者也许注意到了,在前面那些Scheme的例子中列举了如此多的S表达式,其中隐藏的事实是:程序就是数据。因此,#/c就是一个程序,或者我们可以称为代码块(Forms)。以后,我们会使用更加正式的词汇form来代替程序片段这个说法。scheme执行form #/c从而得到一个值#/c,因为#/c是可以自我求值的。并不是所有的S表达式都是可以自我求值的,比如说,对于symbol的s表达式 xyz来说,其求值的是xyz本省或代表的变量。而列表s表达式(string->number "16")求值结果是数字16。
  并不是所有的s表达是都是有效的程序。如果你写如下的代码(1 . 2),则不会通过编译。Scheme运行一个列表样式的form,首先检查第一个元素,或者说检查head,如果head被执行为一个过程(procedure),那么剩下的则被认为是head元素的参数。这个过程就被 应用(apply)于这些参数上
  如果form的head是一个特殊的form,就会以一种特殊的方式来处理,这样的特殊的form,我们见过的包括begin,define和set!,begin就意味着它的子form按顺序执行,整个form的返回值就是最后一个子form的返回值,define定义并给一个变量赋值,set!改变变量绑定的值。
  译者废话:这段话翻译的真的是很费劲,你看懂了吗?我是大概理解了,如果不理解的话,欢迎与我联系
  3.1 过程
  We have seen quite a few primitive Scheme procedures,
  eg, cons, string->list, and the like. Users
  can create their own procedures using the special form
  lambda. For example, the following defines a
  procedure that adds 2to its argument:
  我们已经看到了好多Scheme内置的过程,包括cons,string->list等等。其实用户还可以通过著名的标志性的语句 lambda自己来定义过程。比如说,下面这个例子就定义了一个自动 加2的过程:
  (lambda (x) (+ x 2))
  The first subform, (x), is the list of parameters.
  The remaining subform(s) constitute the procedure's
  body. This procedure can be called on an argument,
  just like a primitive procedure:
  第一个子语句 (x),定义了过程的参数。剩下的所有的子语句就是过程体了,定义完毕后,这个过程就可以像内置的过程那样被使用了。
  ((lambda (x) (+ x 2)) 5)
   =>7
  当然,当然,如果我们要多次调用这个函数的话,不用这么麻烦的,记住:函数是第一公民,和整数,字符串一样,所以我们可以用一个变量来代表这个函数。
  (define add2
  (lambda (x) (+ x 2)))
  从此以后事情就变得简单了:
  (add2 4) =>6
  (add2 9) =>11
  3.1.1 过程参数
  lambda-过程的参数是在它的第一个子form中被定义的(就是符号lambda之后的第一个form),add2是一个只有一个参数——官方的说法叫做一元参数——的过程。所以他的参数列表是只有一个元素的列表 (x)还记得列表吗?这和我们熟悉的命令式语言基本一样,有一点,所有的变量x都是 局部的。
  同样我们可以定义两元或者多元参数的过程:
  (define area
  (lambda (length breadth)
  (* length breadth)))
  注意,这里我们其实可以有一个更加投机取巧的办法:
  (define area *)
  3.1.2 变参
  学过JavaScript的,PHP的或者Python的同学一定对可变参数很熟悉了。学过Java或者C#的同学,我们很同情你们必学写很多重载来模拟这个过程。为了实现这一点。参数列表必学使用一个特殊的符号来标记(又是特殊符号,不过相对很多语言来说,Scheme里面的特殊符号或者所谓的语法糖已经很少了)这个特殊的符号就代表着将要被调用的参数。
  一般来说,我们用(x ...)来表示变参。一个符号,或者说一个点对类型的form (x ... . z),在点对类型点前面的那部分在过程调用的时候与调用的参数进行匹配。点后面的变量,则把剩下的参数作为一个list存下来
  说实话,这段话我也不太理解,主要是没有例子,附上原文,大家参考
  In general, the lambdaparameter list can be a list
  of the form (x ...), a symbol, or a dotted pair of
  the form (x ... . z). In the dotted-pair case, all
  the variables before the dot are bound to the
  corresponding arguments in the procedure call, with the
  single variable after the dot picking up all the
  remaining arguments as one list.
  3.2应用(apply)
  Scheme通过使用过程 apply 来调用一个过程(第一个参数),并把这个过程应用到第二个参数的列表元素上(其实就是把第二个参数列表元素作为第一个参数过程的参数)
  (define x '(1 2 3))
  (apply + x)
   =>6
  一般来说,apply后面跟一个参数作为所要调用的过程,在后面跟着数量不一的所要使用的其他参数。而最后一个必须是一个列表。其构造方法就是先应用过程和最后一个参数,计算出结果,然后结合其他的参数作为这个过程调用的新的参数。
  (apply + 1 2 3 x)
   =>12
  我理解其背后的机制应该是: (+ 1 2 3 (+ 1 2 3))
  3.3 顺序
  We used the beginspecial form to bunch together a
  group of subforms that need to be evaluated in
  sequence. Many Scheme forms have implicit
  begins. For example, let's define a 3-argument procedure that
  displays its three arguments, with spaces between
  them. A possible definition is:
  我们可以通过begin这个特殊的form来组织一系列的子form从而让他们可以按照一定的顺序来执行。许多Scheme的form都要求必须以begin来开始,比如如果我们要定义一个过程,按顺序
  (define display3
  (lambda (arg1 arg2 arg3)
  (begin
  (display arg1)
  (display " ")
  (display arg2)
  (display " ")
  (display arg3)
  (newline)))
  在Scheme中,lambda的函数中默认使用begins,所以在我们下面定义的display3中间并不需要显示的使用begin,当然使用了也没有什么坏处,不用只会让事情更简单。
  (define display3
  (lambda (arg1 arg2 arg3)
  (display arg1)
  (display " ")
  (display arg2)
  (display " ")
  (display arg3)
  (newline)))
  >>
  要发表评论,请先登录

本文转自
http://www.leesoft.com.cn/node/7
Scheme:被低估的计算思维训练场与抽象能力锻造器 在编程语言演进中,函数式编程范式始终是理解计算本质的核心路径。Scheme 作为 Lisp 家族中最精简、最贴近 lambda 演算的形式化系统,以极小语法基底(仅需 lambda、define、if 等少数原语)支撑起对过程抽象、状态建模与接口契约的深度推演。其‘可推导性’和‘可重定义性’特性,迫使学习者直面计算的公理化基础——从 Church 数字构造到惰性求值实现,每一步都在训练将问题映射为可组合、可验证变换管道的能力。这种思维迁移至工程实践,显著提升对 DSL 设计、规则引擎、状态机与算法管道等真实 阅读详情

相关推荐

Sentaurus TCAD自学笔记:Scheme脚本语法速查与避坑指南

在半导体工艺与器件仿真领域,脚本语言是连接用户操作与仿真内核的关键桥梁。不同于常见的命令式编程范式,函数式编程思想以表达式求值为核心,强调数据变换与嵌套组合,在处理参数化结构生成、批量仿真和数据提取时展现出独特优势。掌握这种编程思维,不仅能提升仿真流程的自动化水平,还能有效避免手动操作带来的重复与误差。在实际工程中,半导体仿真工具常通过内嵌脚本接口实现几何建模、掺杂定义、电学特性扫描及结果后处理,而其中的脚本编写与调试往往成为初学者面临的第一道门槛。从基础语法到常见报错排查,从单次仿真到批量参数扫描,系统梳

weixin_34005090的博客 242

NIST-CSF 开源项目使用文档

NIST-CSF 开源项目使用文档 1. 项目的目录结构及介绍 NIST-CSF/ ├── README.md ├── docs/ │ ├── introduction.md │ ├── installation.md │ └── usage.md ├── src/ │ ├── main.py │ ├── config.py │ └── utils/ │ ├──...

gitblog_00292的博客 491

Scrapy 小白自学笔记

Scrapy 小白自学笔记 Scrapy 小白自学笔记 Scrapy环境搭建 安装scrapy pip install scrapy 安装pywin32 D:>pip install pywin32 Collecting pywin32 Using cached pywin32-223-cp35-cp35m-win32.whl Installing collected packages: pywin32 Successfully installed pywin32-223 创建一个scrapy工程

leenuxcore的博客 2058

[scheme-001] 最简scheme教程 001

1.参考资料the scheme programming language 4ththe little schemer2. scheme诞生于1975年,是一种lisp方言。通用型语言,用途遍及it领域。3.关于变量变量名的第一个字母不能是"@"符号,不能是数字,不能是"+" "-" "."这三个。注意,单独的"+" "-"和"..."是有效变量名,且"-&a

大数据和机器学习研究 1万+

从SICP到SICM:用Scheme理解经典力学的结构与解释

编程语言不仅用于构建软件,也是表达物理理论的精确工具。函数式编程强调将计算过程抽象为可组合的函数,这一思想在符号计算与科学计算中尤为突出。Scheme作为一种函数式语言,能够将数学公式转化为可执行的代码结构,从而实现从理论到程序的直接映射。在经典力学中,拉格朗日方程、作用量原理等抽象概念,可以通过Scheme及配套的scmutils库进行符号推导与数值验证,让物理规律变得可操作、可实验。这种计算化表述方式,为理工科学习者提供了一种全新的理解路径:不再依赖手算推导,而是通过编写程序来“运行”物理定律。本文将围

weixin_32576389的博客 208

Scheme入门教程(Yet Another Scheme Tutorial)

Scheme入门教程(Yet Another Scheme Tutorial),从网页下载,转成PDF

scheme 中文教程

参考自: 有没有scheme中文教程,要尽量简单的。? - 知乎 作者:include-yy 链接:https://www.zhihu.com/question/472968356/answer/2005419788 来源:知乎 著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。 《Scheme 简明教程》:teach-yourself-scheme-in-fixnum-days Scheme简明教程 - 《Scheme简明教程》 - 书栈网 · BookStack​www.b.

yilu_beiyu的博客 1322

Scheme入门教程—Yet Another Scheme Tutorial

Yet Another Scheme Tutorial——Scheme入门教程 中文版。其中文地址为:http://deathking.github.io/yast-cn/。pdf只是于2018。08把上面的内容加了目录、标题序号,制作成了pdf。 本教程的目的在于给读者在Scheme程序设计上提供足够的知识和能力以便能够阅读最好的计算机科学教科书之一的——《计算机程序的构造和解释》(Structure and Interpreter of Computer Program,SICP)。SICP使用Scheme作为授课语言。

【Scheme】Scheme 编程学习 (三) —— 闭包

scheme 闭包概念

Loup&卡普的博客 647

scheme简明教程

这是一本在国外比较有名的Scheme编程语言的入门教材。本教材适合任何对Scheme编程语言感兴趣的人阅读,尤其是有其他编程语言(特别是动态语言)编程经验,希望快速了解Scheme的不同点并且快速上手写点东西的人。

scheme语言中文教程

该中文教程详细介绍了scheme语言的语法,规则,是初学者的入门好教材

UC Berkeley CS61A 自学完全指南:从 Python 抽象编程到亲手实现 Scheme 解释器

本篇文章整理自《计算机自学指南(cs-self-learning)》仓库中的 [CS61A 课程页](https://link.gitcode.com/i/2072644a90cc2cb8235e443633e8d9bc),并补充了仓库 [前言](https://link.gitcode.com/i/1cf6e76378c90ee932c8bfa0f4e58a6a)、[CS 学习规划](https

gitblog_00906的博客 328

Scheme语言基础教程

Scheme是MIT在LISP语言的基础上发展而来的一个变种,也可以称之为方言。 多用途,脚本语言,应用软件扩展等等,这些特点都不是scheme独有的,很多的动态语言如perl, python,javascript等都能满足。至于元语言特性,只有少数语言具备这个特征。元语言意味着用户可以自己扩展语义,不局限于某个官方的语法规范,自己可以定义第一级的语法元素

Scheme语言的移动应用开发

Scheme是一种方言的Lisp编程语言,最早由MIT(麻省理工学院)开发。相较于其他编程语言,Scheme拥有简洁的语法和强大的抽象能力。它支持多种编程范式,包括命令式、函数式和逻辑编程,使得开发者能够用更多样化的方式来实现功能。此外,Scheme还强调程序的可组合性和可重用性,为复杂系统的构建提供了更大的灵活性。

2501_91185986的博客 323

cocos2dx lua + protobuf

vs 2015 cocos2dx 3.10  lua  protobuf1. 下载 protobuf 源码     https://github.com/bnnswyp/protobuf/tree/master/protobuf-2.5.0    解压后的文件列表如下所示         其中 vsprojects 文件夹为 protobuf 的vs 工程2. 打开 protobuf.sln 编译...

u014486706的博客 2161

文华财经公式编程:麦语言简介及基础语法

文华财经公式语言(麦语言)是一种专门用于金融领域的编程语言,它是由文华财经公司开发的。提供了丰富的金融计算函数和数据处理功能,可以用于金融市场的数据分析、模型建立和交易策略的开发。例1:A:CLOSE;// 定义变量A为收盘价(盘中k线没有走完的时候A为最新价)。例2:MA5:=MA(C,5);// 定义收盘价的5周期均线(C为CLOSE简写)。例3:A:=REF(C,1);// 取得前一根k线的收盘价。

超哥量化的博客 1万+

Python 与 C++ 双语言自学路线图:零基础 10 个月免费入门完整指南

不知道自己该从哪门语言开始、按什么顺序学,是不是也让你卡住了?其实卡住你的不是天赋,而是一张清晰的地图。这份基于开源指南 cs-self-learning 的自学路线图,把全球名校的免费课程排成 3 个 Level,用约 10 个月带你从零基础走到能写系统级代码。 [![Python 与 C++ 自学路线图课程学习路径](https://raw.gitcode.com/GitHub_Trendi

gitblog_00258的博客 867

手把手调试Altera FPGA远程升级:从ASMI扇区擦除到Remote Update IP配置的避坑实录

本文详细解析了Altera FPGA远程升级的全流程,重点介绍了Cyclone IV系列FPGA的ASMI扇区擦除和Remote Update IP配置的实战技巧。通过双镜像架构设计、ASMI IP核优化配置及Remote Update IP的隐藏参数设置,帮助开发者避免常见陷阱,提升远程升级的可靠性和效率。

weixin_30872499的博客 447

《计算机程序的构造和解释》(SICP) 解题集使用教程

《计算机程序的构造和解释》(SICP) 解题集使用教程 1. 项目介绍 《计算机程序的构造和解释》(SICP) 解题集是由 hjcapple 在 GitHub 上开源的项目,旨在帮助读者学习和理解 SICP 这本书中的编程概念和习题。该项目包含了书中各章节的习题解答,使用 Scheme 语言编写,适合那些希望通过实践来加深对 SICP 内容理解的学习者。 2. 项目快速启动 环境配置 安装 D...

gitblog_00079的博客 340

实测避坑:华为Atlas 300I DUO推理卡部署Qwen1.5,性能对比3090与完整配置流程

本文深度评测华为Atlas 300I DUO推理卡在部署Qwen1.5-14B大模型时的性能表现,并与RTX 3090进行对比。通过实测数据展示硬件参数、部署流程及性能优化建议,揭示国产AI加速卡在LLM推理中的独特优势与适用场景,为开发者提供完整的配置指南和避坑方案。

weixin_29083475的博客 791

中文实体关系抽取数据集大盘点:从百度Duie2.0到医疗CBLUE,哪个更适合你的NLP项目?

本文全面分析了中文实体关系抽取领域的主流数据集,包括百度DuIE 2.0、医疗CBLUE等,帮助开发者根据项目需求选择最适合的数据集。文章详细对比了各数据集的特点、适用场景及优化策略,为自然语言处理项目提供实用指南。

weixin_29284657的博客 121

CS自学指南:30+ 门名校课串成一条自学路线,2-3 年交付作品

零基础自学计算机,最不缺的就是资料,缺的是知道从哪一步开始。cs-self-learning(CS自学指南)把 MIT、伯克利、斯坦福、CMU 的 30+ 门开源课串成一条带先修顺序的自学路线,每章都写清了课程特点和为什么值得跟。按这条 CS 学习路线走 2-3 年,你能交出数十个千行级 Project,而不是收藏夹里一堆吃灰链接。 [![CS自学指南课程总览](https://raw.gitc

gitblog_01058的博客 484

华为OD机考真题 新系统 - 小菊的寻宝之旅(Java/Py/C/C++/Js/Go)

华为OD机试真题 新系统【小菊的寻宝之旅】,提供C语言、Java、C++、Python、Go、JavaScript源码实现,并提供完整思路讲解,以及在线OJ模拟做题。华为OD机试真题 【小菊的寻宝之旅】多语言题解。

qq_45776114的博客 618

编程自学完整指南:Python与C++八个月学习计划

这篇文章写给没有编程基础、但想认真学会 Python 和 C++ 的人。它基于开源的计算机自学指南 cs-self-learning,读完你会拿到一份分阶段、带周期和"完成信号"的自学计划:学什么课、每周投入多少、怎么算学完、哪里容易卡住,本周就能动手。 [![计算机自学指南Python与C++学习路线总览](https://raw.gitcode.com/GitHub_Trending/cs/

gitblog_01099的博客 474

【GameFramework框架内置模块】9、有限状态机(FSM)

这篇文章分享FSM有限状态机,了解过StarForce源码的同学相比都比较了解,GameFramework框架给我们抽象了一个Procedure流程的概念。这个Procedure流程可以方便的处理我们游戏从启动到游戏的各个流程阶段的处理逻辑,实现的核心就是FSM状态机,内部的Procedure流程就是不同的FsmState状态。接下来,就是FSM有限状态机的教程了。有限状态机(Finite-state machine,FSM)

优快云博客专家,Unity3D高级软件工程师,《Unity 3D从入门到实战》作者。 2532

第一章:Profibus DP通信简介

PROFIBUS (Process Fieldbus)的缩写,是一种国际化的、开放的、不依赖于设备生产商的现场总线标准。它广泛应用于制造业自动化、流程工业自动化和楼宇、交通、电力等其他工业自动化领域。串行现场总线主要用来连接数字现场设备或中、低功能的系统,如传感器、执行机构、变送器、可编程序控制器(PLC)、数控装置(NC)、编程设备、本地人机接口等。

qq_22560021的博客 4892
上一篇: Scheme 自学教程 1
下一篇: SQL Server 2005 中感受Synonym | Leesoft.com.cn
developerly
博客等级 码龄26年 2粉丝 33原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值