`
RednaxelaFX
  • 浏览: 3052558 次
  • 性别: Icon_minigender_1
  • 来自: 海外
社区版块
存档分类
最新评论

Scheme非完整笔记

阅读更多
反正边学边记就是了……

======================================================

标识符允许的范围:

[a-zA-Z?!*\/<=>:$%\^&_.~][a-zA-Z0-9?!.+\-*\/<=>:$%\^&_.~@]*

也就是:
小写字符a-z
大写字符A-Z
数字0-9
符号 ? ! . + - * / < = > : $ % ^ & _ ~ @

标识符开头不能为'@',一般也不以数字、'+'、'-'、'.'开头。
"+"、"-"、"..."为例外。

标识符的大小写不敏感。

------------------------------------------------------

注释标记:
';'开始直到行末是注释。

------------------------------------------------------

数据类型:

表:用成对的括号("()")括住的。可以嵌套。也称为S-expression(Symbolic expression)。

向量:("#()")括住的,例如#(this is a vector of symbols)。

字符:("#\")开头的,例如#\a。

字符串:成对的双引号之内括住的,例如"This is a string."。

数字:
--整型:123, +123, -123
--有理数:1/2
--浮点数:1.3, 1e23
--复数:1.2-2.3i(平面坐标), -1.2@73(极坐标)

布尔值:#t #f。在Scheme的条件表达式里,只有#f才被认为是假,而其它对象都被认为是真。所以3, (), "false", nil都是真。
(DEFINE (test a)
  (COND
    ((EVAL a) (DISPLAY "true"))
    (ELSE (DISPLAY "false"))
  )
)
(test #f) ;=> false
(test ()) ;=> true


======================================================

谓词:
EQ? EQV? EQUAL? LIST? NULL?

数字谓词:
= <> < > <= >= >= EVEN? ODD? ZERO?

======================================================

表操作函数:

CAR:取表头
CDR:取表头以外剩余的部分
CONS:连接表。与CAR/CDR是相对的操作。
(CONS (CAR list) (CDR list)) ;=> list

APPEND:合并两个表
(APPEND list1 list2)

(APPEND '(a b c) '(d e f)) ;=> (a b c d e f)


======================================================

控制流/条件语句:

if语句:

(IF
  predicate_expression
  then_expression
  else_expression
)


例如
(IF (> a b)
  (- a b)
  (- b a)
)


------------------------------------------------------

cond语句:

(COND
  (predicate_1 expression_1 expression_2 ...)
  (predicate_1 expression_1 expression_2 ...)
  (predicate_1 expression_1 expression_2 ...)
  ...
  (predicate_1 expression_1 expression_2 ...)
  (else expression_1 expression_2 ...)
)


cond语句按照代码书写的顺序从前向后匹配谓词,然后执行第一个值为真的谓词后面的表达式。
else是可选的。实际上这里else就是一个#t值而已。

例如
(COND
  ((> a b) 1)
  ((= a b) 0)
  ((< a b) -1)
)


======================================================

lambda表达式:

(LAMBDA (formal_parameter_1 formal_parameter_2 ...)
  expression_1 expression_2 ...
)


======================================================

quote表达式:

所有表和原子符号都会被解释器eval,为了避免某些表或原子符号被eval,则需要将其quote起来。
(QUOTE expression)

这个也可以被缩写为
'expression


======================================================

定义常量或函数:

(DEFINE symbol expression)

(DEFINE function_name (LAMBDA (formal_parameter_1 formal_parameter_2 ...)
  expression_1 expression_2 ...
))

(DEFINE (function_name formal_parameter_1 formal_parameter_2 ...)
  expression_1 expression_2 ...
))


======================================================

let表达式:

(LET (
  (name_1 expression_1)
  (name_2 expression_2)
  ...
  (name_n expression_n)
    )
  expression_1 expression_2 ..
)


======================================================

一些数值运算函数:

(SQRT a) :a的平方根
(EXPT a b) :a的b次幂
(REMAINDER a b) :a模b
(LOG a) :a的自然对数
(SIN a) :a的正弦值,其中a是弧度

======================================================

输入/输出:
(DISPLAY expression)

(NEWLINE)
分享到:
评论

相关推荐

    懒人笔记 一个 iOS 开源笔记 App.zip

    这可能涉及到Xcode的Scheme设置,以及JUnit或XCResult等格式的测试报告。理解这些内容有助于提升开发流程的效率和代码质量。 总之,虽然懒人笔记项目不再更新,但它依然是一座丰富的学习宝库。通过深入研究其源代码...

    3dmax学习笔记复习要点

    * 加载自定义 UI 方案:自定义菜单 -&gt; load custom UI scheme -&gt; 浏览 3D 安装文件夹(D:\program files\Autodesk\3Ds max9\UI)-&gt; Default UI(默认) ame-dark(黑色) * 显示 UI:自定义菜单 -&gt; show ui -&gt; show ...

    Android Intent 学习笔记

    Android Intent 学习笔记

    HTTP学习笔记

    HTTP学习笔记 HTTP协议是万维网的基础协议,主要规定了浏览器和万维网服务器之间的相互通信规则。下面是对HTTP协议的详细介绍: 一、HTTP协议的定义 HTTP协议(超文本协议)是一种详细规定了浏览器和万维网...

    华三攻城狮笔记交换机最常用配置整理

    ### 华三攻城狮笔记交换机最常用配置整理 #### 一、登录方式典型配置 在华三(H3C)交换机中,登录方式的配置是非常基础且重要的环节,它涉及到网络设备的安全性和易用性。根据不同的安全需求,可以采用多种登录...

    OAF 开发笔记

    ### OAF 开发笔记知识点详解 #### 一、AM设置与命名规范 ##### AM设置 在Oracle Application Framework (OAF)开发中,AM(Application Module)是管理业务逻辑的关键组件。为了防止对象钝化(即对象状态丢失),需...

    nginx 笔记和资料

    **Nginx简介** ...它以其高并发、低内存消耗以及稳定的工作性能而受到广泛赞誉。... **Nginx安装** ...提供的“nginx笔记+资料”压缩包应该包含了更详细的信息,可以帮助你进一步掌握Nginx的相关知识。

    KScheme:Mini-Scheme(公共领域Scheme解释器)的更新和重构版本

    笔记 缺少文档,自Mini-Scheme以来,我添加了许多功能,因此需要新文档。 现在,您必须浏览C ++源代码和init.scm文件,以了解可用的标准函数以及它们的作用。大多数新功能都是作为可选扩展实现的,因此可以在构建时...

    哈尔滨工业大学《数据结构与算法》、《软件开发实践》作业及实验的Scheme解法。.zip

    在哈工大的《数据结构与算法》以及...而其中的C/C++/JAVA/Python的学习笔记和资料则为深入理解和应用这些语言提供了丰富的素材。无论你是准备考试、做项目,还是进行个人学习,这个资源包都是一个不可多得的宝藏。

    leetcode题库-MyNote:`13的学习笔记

    的学习笔记 学习笔记与练习项目源码整理 The Only Easy Day Was Yesterday 编程语言 C 参考书籍 : 《c primer plus》 6th edition 书内习题答案总结 , 优秀源码赏析 快速平方根算法 kilo (1000行的源文本编辑器) ...

    2018javaScript_137课【笔记+demo】

    但实际上它的语法风格与Self及Scheme较为接近。[1] 为了取得技术优势,微软推出了JScript,CEnvi推出ScriptEase,与JavaScript同样可在浏览器上运行。为了统一规格,因为JavaScript兼容于ECMA标准,因此也称为...

    wifi协议重点学习笔记

    物理层还涉及到调制与编码方案(MODulation and COding Scheme, MCS),包括BPSK、QPSK、16-QAM、64-QAM等,它们决定了数据在无线信号中表示的方式。不同的MCS等级对应不同的数据传输速率和信号质量。 在媒体访问...

    吉林大学形式语义学 笔记

    5. **简明过程式语言的指称语义**(第7,8章):这部分内容可能涉及到对简单过程式语言如Lisp或Scheme的基本概念和语义的解释,包括函数调用、参数传递和控制结构的处理。 这些笔记内容全面且深入,对于想要深入理解...

    Python爬虫笔记!!!

    "Python爬虫笔记" Python爬虫笔记是指使用Python语言来实现网络爬虫程序的技术笔记。爬虫程序可以模拟人类请求网站行为,自动请求网页、抓取数据,并使用一定的规则提取有价值的数据。 爬虫的实际例子包括搜索引擎...

    同态加密算法Fully Homomorphic Encryption over the Integers

    We construct a simple fully homomorphic encryption scheme, using only elementary modular arithmetic. We use Gentry’s technique to construct a fully homomorphic scheme from a “bootstrappable” ...

    android测试SSL笔记

    Scheme sch = new Scheme("https", socketFactory, 443); HttpClient httpclient = new DefaultHttpClient(); httpclient.getConnectionManager().getSchemeRegistry().register(sch); ``` 这里,`your_password`是...

    6.945:高级符号编程冒险笔记

    【标题】"6.945:高级符号编程冒险笔记" 涉及的主要内容是对高级符号编程语言的深入探讨,特别是围绕 Scheme 这一Lisp方言进行的。MIT(麻省理工学院)的6.945课程是为那些对计算机科学理论和实践有深厚兴趣的学生...

    zigbee 大规模组网笔记(TI)

    Zigbee是一种基于IEEE 802.15.4标准的低功耗无线通信技术,主要用于近距离、低速率的...通过这篇笔记,读者可以了解如何使用TI的Zigbee解决方案来满足大规模应用的需求,特别是在需要收集大量传感器节点数据的情况下。

    Scheme7-开源

    8. **docs**:文档文件夹,可能包含设计文档、API参考、教程或者开发过程中的笔记,帮助开发者理解和修改项目。 综合以上信息,Scheme7是一个使用Python编程语言开发的开源ARPG游戏,它的源代码、资源和相关文档都...

Global site tag (gtag.js) - Google Analytics