代码改变世界

随笔分类 -  fp_Lisp(scheme)

Church encoding

2014-04-15 21:36 by youxin, 1225 阅读, 收藏, 编辑
摘要: Inmathematics,Church encodingis a means of representing data and operators in thelambda calculus. The data and operators form a mathematical structure... 阅读全文

sphinx插入代码

2014-04-08 21:46 by youxin, 2179 阅读, 收藏, 编辑
摘要: 示例的Python源代码或者交互界面都可以使用标准reST模块实现.在正常段落后面跟着::开始,再加上适当缩进.交互界面需包含提示及Python代码的输出. 交互界面没有特别的标记. 在最后一行输入或输出之后,不应出现空的提示; 这是一个什么都不做的例子:>>> 1 + 12>>>语法高亮显示由Pygments(如果安装) 优雅的显示:每个源文件都有高亮语言”highlighting language”. 默认是'python',多数文件会高亮显示 Python 代码段, 可以在:confval:`highlight_language`配置. 阅读全文

关于type check的定义

2014-04-01 15:05 by youxin, 894 阅读, 收藏, 编辑
摘要: Concept: Type CheckingThere is no static type checking in Scheme; type checking is done at run time.There is unfortunately little agreement about many of the terms which are associated with type checking: so I'll give you the definitions we'll use in class, while pointing out some of the oth 阅读全文

scheme corotuine

2014-04-01 12:07 by youxin, 403 阅读, 收藏, 编辑
摘要: In cooperative multithreading, a thread must yield control manually; it will not be preemptively switched out.The API for cooperative multithreading has five functions:(spawnthunk)puts a thread forthunkinto the thread queue.(quit)kills the current thread and removes it from the thread queue.(yield)h 阅读全文

scheme和common lisp 区别

2014-04-01 10:00 by youxin, 1415 阅读, 收藏, 编辑
摘要: Scheme and Common Lisp use different names for some of the basic system functions. Many Lisp programs can be translated to the other dialect simply by changing these names (or by providing the existing names as macros or functions). Compatibility packages exist to allow programs in one dialect to ru 阅读全文

协程coroutine

2014-03-25 20:40 by youxin, 4087 阅读, 收藏, 编辑
摘要: 协程(coroutine)顾名思义就是“协作的例程”(co-operative routines)。跟具有操作系统概念的线程不一样,协程是在用户空间利用程序语言的语法语义就能实现逻辑上类似多任务的编程技巧。实际上协程的概念比线程还要早,按照 Knuth 的说法“子例程是协程的特例”,一个子例程就是一次子函数调用,那么实际上协程就是类函数一样的程序组件,你可以在一个线程里面轻松创建数十万个协程,就像数十万次函数调用一样。只不过子例程只有一个调用入口起始点,返回之后就结束了,而协程入口既可以是起始点,又可以从上一个返回点继续执行,也就是说协程之间可以通过 yield 方式转移执行权,对称(symm 阅读全文

sicp第1章

2014-03-14 21:10 by youxin, 728 阅读, 收藏, 编辑
摘要: 牛顿迭代法求平方:(define (sqrt-iter guess x) (if (good-enough? guess x) guess (sqrt-iter (improve guess x) x) ) )(define (improve guess x) (... 阅读全文

《how to design programs》15章 相互引用的数据定义

2014-03-14 14:54 by youxin, 406 阅读, 收藏, 编辑
摘要: 由结构体组成的表与结构体中的表。在用追溯形式建立家家谱树时,我们通常从某个后代除法,依次处理它的父母,组父母等。而构建树时,我们会不断添加谁是谁的孩子,而不是写出谁是谁的父母,从而建立一颗后代家谱树。绘制后代数与绘制祖先树一样,只是将所有箭头的方向都反了过来:(define-struct parent (children name date eyes))children数量不固定,怎么办?自然的选择是另children代表由parent结构体组成的表,这个表代表孩子,parent是结构体:(make-parent loc n d e) loc是孩子的表。不幸的是,这个数据定义违反了我们关于定义 阅读全文

《how to design programs》14章 再论自引用数据

2014-03-13 21:41 by youxin, 421 阅读, 收藏, 编辑
摘要: 这是一个家族谱:;child(define-struct child (father mother name date eyes))#lang racket;child(define-struct child (father mother name date eyes));; Oldest Generation:(define Carl (make-child empty empty 'Carl 1926 'green))(define Bettina (make-child empty empty 'Bettina 1926 'green));; Middle 阅读全文

sphinx,github和readthedocs配合使用

2014-03-12 22:05 by youxin, 563 阅读, 收藏, 编辑
摘要: http://daler.github.io/sphinxdoc-test/includeme.htmlhttp://pages.github.com/http://www.lulinfeng.com/sphinx-github.htmlhttp://hi.baidu.com/limodou/item/bffbe725413abd0977272cf6 阅读全文

Markdown和reStructuredText语法比较

2014-03-12 20:29 by youxin, 8483 阅读, 收藏, 编辑
摘要: reStructuredText在线编辑器http://rst.ninjs.org/ReST是Docutils的标记语法,Docutils是Python世界的文档工具集。也因为这样ReST在Python界中被广泛应用,比如Sphinx–这个基于Docutils的文档工具–事实上作为Python中的标准文档工具被广泛使用了。比如Python官方文档。因为Sphinx可以生成多种格式,设计思路对比—————先来看一下 Markdown ,官方的说法直截了当, Markdown 就是个 text-to-HTML 的工具。所以说,从一开始,Markdown 就确立了它与 HTML 的亲缘性。这是 Ma 阅读全文

《how to design programs》13章用list构造表

2014-03-12 17:28 by youxin, 294 阅读, 收藏, 编辑
摘要: 使用cons构造一个包含多个元素的表十分麻烦,因此scheme提供了list操作,该操作接受任意量的值作为输入以创建一个表,下面是扩展的语法:=list扩展的scheme值的集合是:=(list .... )理解list表达式的一种简单方法是将它当做若干cons的简写,具体来说,就是(list exp1 expe2 .......... exp-n)看成如下:(cons exp1 (cons . (cons exp-n empty))下面是3个例子:(list 1 2)=(cons 1 (cons 2 empty))list不仅作用于值,也可以作用于表达式:(list (+ 0... 阅读全文

文档整体解决方案(readthedocs、github 、sphinx)使用

2014-03-11 15:58 by youxin, 7058 阅读, 收藏, 编辑
摘要: 这里是总结了一下,用的工具或者平台:readthedocs、github、sphinx。 使用这三个工具即可轻松创建高效的文档管理库,可以用来翻译,水平再高一点可以写书。readthedocs文档托管的平台,能够和常用的GIT阵营的github,HG阵营的Bitbucket,关于这两个平台的讨论比较文章可以参考。github代码托管sphinx文档书写利器,使用的是reStructuredText格式,reStructuredText简明教程。下面说说书写方法及托管流程在这里注册一个帐号-->登录。git的帐号及使用大家应该很熟悉了,在这里不再赘述。创建一个repo以存放sphinx(我 阅读全文

scheme lambda表达式 形参

2014-03-11 12:32 by youxin, 1722 阅读, 收藏, 编辑
摘要: lambda表达式(Lambda (arg1 …) exp1 exp2)从演算来看,(let ((var value) …) exp1 exp2…) == ((lambda (var …) exp1 exp2 …) value … )对于Lambda函数的参数如果形参只有一个,则可以有任意数量的实参,所有实参被格式化为一个list传给函数。如果形参list是不正常的list的形式,则形参对应的实参被一一映射,而后的实参被格式化成一个list传给.后的形参,这也意味着,实参个数必须保证形参个数。如果形参是一个正常的list,则实参必须被一一映射。因此((lambda (x) x) ‘a) = a 阅读全文

haskell 开发环境配置

2014-03-10 13:20 by youxin, 3907 阅读, 收藏, 编辑
摘要: haskell是一门通用函数式语言,几乎可以进行任何种类的开发,包括命令行,GUI,数据库,Web.源代码可以跨平台: Linux,Mac, Windows, FreeBSD 等.haskell特点:函数式变成风格为主,命令式风格为辅,具有严格且方便易用的类型系统。类型检查可以帮助程序员在开发过程中避免很多错误,并辅助组织程序的结构。haskell的开发工具主要有 GHC, hugs 两种, 还有中 nhc 没用过就不说了。我们这里要安装的是 GHC,以及在 ghc 基础上的 Haskell Platform。GHC:全称: Glasgow Haskell Compiler , 包含一个高效. 阅读全文

图灵完备

2014-03-09 20:15 by youxin, 2002 阅读, 收藏, 编辑
摘要: 一切可计算的问题都能计算,这样的虚拟机或者编程语言就叫图灵完备的。一个能计算出每个图灵可计算函数(Turing-computable function)的计算系统被称为图灵完备的。一个语言是图灵完备的,意味着该语言的计算能力与一个通用图灵机(Universal Turing Machine)相当,这也是现代计算机语言所能拥有的最高能力。图灵完备是什么意思呢?在可计算理论中,当一组数据操作的规则(一组指令集,编程语言,或者元胞自动机)满足任意数据按照一定的顺序可以计算出结果,被称为图灵完备(turing complete)。一个有图灵完备指令集的设备被定义为通用计算机。如果是图灵完备的,它(计算 阅读全文

转:implementing cons/car/cdr without explicit storage

2014-03-09 19:06 by youxin, 270 阅读, 收藏, 编辑
摘要: I know this is old wine but it’s just too cool! It elegantly demonstrates closure and higher-order functions in a dozen lines, yet retains the robustness. The “intuitive” idea of storage is totally absent, replaced by the “environment” reserved by the interpreter. The first time I saw this is in the 阅读全文

scheme 阴阳谜题

2014-02-16 19:52 by youxin, 827 阅读, 收藏, 编辑
摘要: 本篇分析continuation的一个著名例子"阴阳迷题",这是由David Madore先生提出的,原谜题如下:(let* ((yin ((lambda (foo) (display "@") foo) (call/cc (lambda (bar) bar)))) (yang ((lambda (foo) (display "*") foo) (call/cc (lambda (bar) bar))))) (yin yang))这里引用了http://www.ibm.com/developerworks/cn/linux/l-sch 阅读全文

quote, quasiquote, unquote和unquote-splicing

2014-02-16 17:05 by youxin, 1538 阅读, 收藏, 编辑
摘要: 关于符号类型符号类型又称引用类型,在概要一文中本人介绍得非常的模糊,使很多初学者不理解。符号类型在Scheme语言中是最基础也是最重要的一种类型,这是因为Scheme语言的祖先Lisp语言的最初目的就是符号处理,在Scheme语言中几乎所有的东西都可以看做是符号或做为符号列表来处理,这也是我们把符号类型做为第一个问题研究的原因。与符号类型相关的关键字有四个,分别是:quote, quasiquote, unquote和unquote-splicing,如下所示:规范用法:(quote obj)简化用法:'obj (注意,'为右单引号,"双引号下面的那个符号。)意义:符 阅读全文

Eq Eqv Equal

2014-02-16 16:24 by youxin, 225 阅读, 收藏, 编辑
摘要: http://docs.huihoo.com/homepage/shredderyin/wiki/EqEqvEqual.html 阅读全文