level 3
lisp七条公理说,七个原始操作符可以构造出一门完整的语言,求教怎么用七个操作符构造call/cc
2013年08月24日 05点08分
1
level 8
这个表述感觉不太恰当,应该还要用到defun(或其它类似物),用这些实现一个支持call/cc的解释器是比较简单的,你只需为每一种基本操作(如cond,函数调用)设计一种continuation,然后进行解释便可,你可以看看Dan Friedman的Essentials of Programming Languages的第五章,continuation可以用结构体表示,也可以用闭包表示.如果要用七公理的话,可以用列表模拟结构体,打个标签来区分数据类型
2013年08月24日 10点08分
2
谢谢推荐,不过上面那个话可不是我说的,是保罗格雷厄姆在《Lisp之根源》中说的。原文的确用七个操作符构造了很多别的操作符,我只是想求证原文所说“在只给定几个简单的操作符和一个 表示函数的记号的基础上, ...构造出一个完整的编程语言”的正确性。然后就想到了call/cc,一下子没想出来,呵呵。
2013年08月24日 10点08分
回复 mfsk :你是指不写解释器直接实现call/cc这个函数吗,这个基本没戏,但是如果能使用宏就可以,用宏对程序进行CPS变换就能轻松实现call/cc,你可以看看cl-cont的实现
2013年08月24日 11点08分
回复 mfsk :cl-cont通过一个code walker对程序进行CPS变换,让本来不支持continuation的Common Lisp能够使用call/cc
2013年08月24日 11点08分
level 3
确实不恰当,就像ski组合子逻辑也可以构建一个完整(图灵完备)的语言(确实有这么个语言,被算进“晦涩难懂的编程语言”里)。但那个实现的语言对其他语言只能模拟。七公理虽然有形式相近,但仍然需要模拟才行。这就不能在这个层面直接实现
2013年08月28日 10点08分
3
就是说要写个解释器之类的东西
2013年08月28日 10点08分