从“八皇后”到amb

讲故事并不是我擅长的事情,不过事情总有一个开始,诸位看官莫嫌我絮烦,只是希望可以讲述的更有条理一些。某日正读一本关于Erlang的书,书中出了一个关于八皇后的题目,这是计算机科学中经典的问题,当年上学时曾绞尽脑汁仍然云山雾罩,不得其解。如今再次相遇,岂能再坐壁上观?!更何况手边已有趁手的兵器。试看Erlang的实现: ...

五月 23, 2020

无重复字符的最长子串-Scheme实现

实现 下面将使用Scheme语言来实现“无重复字符的最长子串”,即,对于字符串"abbabcx",其最长无重复字符的子串为"abcx",长度4,详细描述可访问https://leetcode-cn.com/problems/longest-substring-without-repeating-characters/ ...

三月 12, 2020

Scheme实现一个FIFO队列

闲来无事,用Scheme实现一个FIFO队列,数据从末端插入,从前端删除或者查询。 队列可以看成是由下面一组操作定义的结构: 构造函数 (make-queue) 返回一个空队列 ...

三月 6, 2020

兼容性(Compatibility Features in Chez Scheme)

本章介绍了当前版本的Chez Scheme中包含的几个项目,主要是为了与系统的较早版本兼容。由于兼容功能可能在未来会被放弃,所以新项目中应尽可能使用Scheme标准机制。 ...

二月 18, 2020

线程(Thread System in Chez Scheme)

下面介绍Chez Scheme线程系统过程和语法形式。 除了锁,锁增量和锁减量之外,线程系统的功能在非基于Windows的系统上在Posix线程系统(pthreads)之上实现,并在基于Windows的系统上直接使用Windows API。 有关线程创建和交互的基本详细信息,请查阅系统上的相应文档。 ...

二月 17, 2020

存储管理(Storage Management in Chez Scheme)

垃圾回收 Scheme程序不会显式地释放诸如序对,字符串和过程之类的Scheme对象。 相反,一旦存储管理系统证明不再可以访问该对象,它就会自动回收与该对象关联的存储。 为了回收此存储,Chez Scheme使用了一个垃圾收集器,该垃圾收集器在程序运行时定期运行。 垃圾收集器从一组已知的根开始(例如,机器注册),查找所有可访问对象,并在大多数情况下复制它们,以消除可访问对象之间的碎片,并回收不可访问对象所占用的存储。 ...

二月 12, 2020

系统操作(System Operations in Chez Scheme)

异常 (warning who msg irritant …) 返回:未指定 警告会引发条件类型&warning的持续异常,并应用于描述&warning条件类型适用的情况,通常是一种不应该阻止程序继续运行但可能在以后导致更严重问题的情况。 通常最好是识别程序员已调用的过程,而不是程序员可能不知道的其他过程。 msg必须为字符串,并应描述异常情况。irritant可以是任何Scheme对象,并且应包含可能导致或严重涉及异常情况的值。 ...

二月 6, 2020

Scheme语法define-record-type介绍

define-record-type Scheme语言中的define-record-type形式用来定义一个记录类型,并定义该类型的构造函数、仅对该类型的record返回true的谓词、以及每个字段的访问procedure和针对可变字段的赋值procedure。总的来说,与Java中的POJO类比较相似,不过不用自定义getter和setter方法,这与Kotlin倒为类似,例如: ...

二月 3, 2020

Chez Scheme Modules

Modules 模块用于帮助将程序组织成单独的部分,这些部分通过声明好的接口干净地交互。尽管模块化编程通常可以为多人参加的大型程序开发带来便利,但它也可以在 Chez Scheme 中以“微模块”级别使用,因为 Chez Scheme 中的模块和 import 形式属于定义,并且可以出现在定义可以出现的任意位置,包括在 lambda 表达式的程序体或其他局部作用域中。 ...

一月 17, 2020

自定义 Let*

实现Let*语法的两种方式,主要目的是记录两种编程思路,在编写其他程序时应该也有所裨益。 (define-syntax my-let* (syntax-rules () ((_ () bodys ...) (let () bodys ...)) ( (_ ((a1 v1)) bodys ...) (let ((a1 v1)) bodys ...) ) ( (_ ((a1 v1) (a2 v2) ...) bodys ...) (let ((a1 v1)) (my-let* ((a2 v2) ...) bodys ...)) ) ) ) 注意,my-let*是可以递归使用的,以及**…**的用法。 ...

一月 17, 2020