Syntactic Extension and Modules in Chez Scheme

Fluid Keyword Bindings fluid-let-syntax 语法: fluid-let-syntax ((keyword expr) …) form1 form2 …) fluid-let-syntax与标准let语法相似,不同之处在于Fluid-let-syntax在其body扩展期间会暂时更改keyword的现有绑定,而不是引入keyword的新绑定。也就是说,在扩展form1 form2 …的过程中,每个keyword的可见范围(或顶级)将会临时替换为新的绑定关系。 ...

一月 15, 2020

Chez Scheme中Boxes介绍

Chez Scheme中有一种Boxes结构,它是一个单元素对象,主要用于提供一个“额外的间接层”。这个额外的间接层,通常用于使多个代码块或数据结构可以共享指向一个对象的引用,或指针。例如,在采用此种参数传递规则的语言的解释器中,可以用 boxes 实现 call-by-reference 的语义。解释有点绕,按我的理解boxes就相当于Golang的struct、Java中的类,将一些状态包装成一个整块,外界通过引用该整块的指针来访问内部的各个状态。 ...

一月 3, 2020

Scheme/Chez Scheme 对象操作

Pairs and Lists atom? atom? 相当于 (lambda (x) (not (pair? x))) (atom? '(a b c)) ⇒ #f (atom? '(3 . 4)) ⇒ #f (atom? '()) ⇒ #t (atom? 3) ⇒ #t list-head(Chez) 用法:(list-head list n) n是一个非负整数,且小于等于list的长度;list-head和Scheme标准过程list-tail可能会同时使用来切割一个list,不同点在于,list-tail不会分配内存而只是返回源list的一个子列表,list-head总是返回源list前n个元素的副本 ...

十二月 30, 2019

Engine in Scheme

Engine(引擎)是支持时间抢占 的高级抽象过程, 它可被用于模拟多任务处理、实现操作系统内核和非确定性计算。 (make-engine thunk) 通过传递一个无参数的thunk(形实转换程序)给make-engine来创建一个engine。thunk的body是会被engine执行的计算,engine本身是带3个参数的过程: ...

十二月 27, 2019

Chez Scheme中的case扩展

case Scheme原生提供了if语法,用于判断十分便利,但是对于某些多于一个的条件,就只能嵌套写if来实现了,写起来有些不便,Chez Scheme提供了case语法来处理这种情况,这与Java中的switch语法非常相似。 ...

十二月 25, 2019

Fluid Binding in Chez Scheme

Fluid Binding是Chez另一个扩展,这个名词不太好翻译,我想想暂时就叫易变绑定吧,如果有更好的翻译请在文后的评论中尽情发表。 先看看该语法描述: (fluid-let ((var expr) …) body1 body2 …) returns: the values of the body body1 body2 … libraries: (chezscheme) ...

十二月 24, 2019

Recursive Bindings in Chez Scheme

rec语法是Chez Scheme中一个非常有用的扩展,在不依赖外部变量进行递归时将很有用,可以减轻代码且使代码更加容易阅读。 这是语法描述: (rec var expr) syntax returns: value of expr libraries: (chezscheme) ...

十二月 24, 2019

钱币组合问题

最近同事参加公司的黑客竞赛,有一道题目与钱币组合问题比较像,记得SICP里面有所描述,正好不是很忙,就试着实现该算法,用Scheme语言开发。 ...

十二月 13, 2019