2020-04-29
Common Lisp (简称“CL”)诞生于1984年,最一开始的目标是期望把70年代末80年代初的那些 lisp 家族的语言做一番综合和统一。CL 很成功的实现了这个目标,这使得 CL 的各种设计来自于当时各种各样的 lisp 家族的语言。几年以后,CL 迎来了一次升级,核心语言基本上没有太大的变动,主要是加入了CLOS。1994年,ANSI 发布了第一...
阅读全文
2020-04-24
Ubuntu 下火狐的渲染总是让人无语。如下所示。
其实问题不在渲染,而是默认fallback到了AR PL Uming CN这个字体。那么,删除软件包fonts-arphic-uming即可。
删除后效果如下。
阅读全文
2020-04-16
本文根据笔者2017年的一次讲座整理。
聪明的你一定发现,为什么执行顺序不确定的CHR程序,放到 K.U.Leuven CHR System 中,就一定会得到预期的执行结果呢?实际上,绝大多数CHR实现,包括 K.U.Leuven CHR Syste 在内,都使用另外一种语义 Refined Operational Semantics,记为 ωr\ome...
阅读全文
2020-04-16
本文根据笔者2017年的一次讲座整理。
语法描述了一个编程语言应该是什么样子,语义描述的是”是什么意思“。本文讲述CHR的标准操作语义(Standard Operational Semantics[1])。这套语义加入了防止重复应用规则的机制。
Numbered Constraints
给一个约束ccc加上一个值为iii的ID,用c#ic\#ic#i来表...
阅读全文
2020-04-15
本文根据笔者2017年的一次讲座整理。
在 Prolog 语法的基础上,CHR实现了自己的一套语法。CHR本身的语法也很简单,Gregory J. Duck. 实现过一个叫 ToyCHR[1] 的 reference implementation,只有500行代码。
Constraints
约束(Constraints)的概念,已经在之前提到过了。这里更...
阅读全文
2020-04-14
本文根据笔者2017年的一次讲座整理。
尽管CHR是一门 General Purpose 的编程语言,可以像C/C++那样用来做任何通用工作。然而,目前已有的实现,都是将CHR实现成一门嵌入式语言,就像lua那样。
CHR的语法,本身也是Prolog语法。这样做的好处是,CHR程序可以和Prolog程序混合在一起,让人毫不察觉。而对于那些不想和Prolo...
阅读全文
2020-04-14
本文根据笔者2017年的一次讲座整理。
先看一段CHR代码[1],这段代码描述了一个CHR规则。
1min(X) \ min(Y) <=> X =< Y | true.
如何理解这段代码呢?若min(X)和min(Y)同时出现,且X≤YX \leq YX≤Y, 那么删除min(Y)。也就是,min(X)和min(Y)同时出现的时候,删掉...
阅读全文
2020-04-12
本文根据笔者2017年的一次讲座整理。
那今天我就给大家介绍一门新的编程语言,叫Constraint Handling Rules(缩写CHR)。CHR和C/C++等主流语言一样,是一门general purpose编程语言,换句话说,就是什么都能写。然而大多数时候,这个语言被实现为一个库。最主流的实现,是Leuven CHR System,被集成于各大...
阅读全文