函数式编程
文章平均质量分 78
yuan_da_xing
不扯淡,好好做件有意义的事
展开
-
使用lisp实现SICP约束系统
问题引入 C++&C的代码的执行都是由coder预先安排好的,程序的执行方向都是确定的。比如a=2*3,由2,3计算出a的值。 这篇文章讨论的是这样一种场景:给定一个约束条件,比如A*C=B*D,用户给定任意给定三个值,我们可以根据等式计算出第4个值。 如果用C&C++实现,我们可能的做法是写四个函数(C(4,3)),然后根据用户的输入去调用相应的函数计算,如果计算的式子更加复杂,并且可能有原创 2012-11-21 21:06:52 · 842 阅读 · 0 评论 -
综合问题
P90 (**) Eight queens problem(八皇后问题)This is a classical problem in computer science. The objective is to place eight queens on a chessboard so that no two queens are attacking each other; i.e., no two原创 2013-03-10 21:08:22 · 793 阅读 · 0 评论 -
99道lisp练习题----(四)树
Binary Trees A binary tree is either empty or it is composed of a root element and two successors, which are binary trees themselves. In Lisp we represent the empty tree by 'nil' and the non-empty原创 2013-03-08 22:28:05 · 1205 阅读 · 0 评论 -
99道lisp练习题----(一)列表操作
99道习题来自 http://www.ic.unicamp.br/~meidanis/courses/mc336/2006s2/funcional/L-99_Ninety-Nine_Lisp_Problems.html,并且该网页上有解答。 P01 (*) Find the last box of a list. (查找列表最后一个元素)Example: * (my-last '(a b原创 2013-03-06 20:42:30 · 2967 阅读 · 0 评论 -
on-lisp要点-----宏(二)
一、宏的引入 1.什么时候需要宏,宏可以做什么 优秀设计的一个通用原则就是:当你发现在程序中的几处都出现了相似的代码时,就应该写一个子例程,并把那些相似的语句换成对这个子例程的调用,lisp中可以使用宏,为我们创建上下文环境,或者利用宏,直接在上下文中计算。 宏可以控制 (或阻止) 对其参数的求值,并且它可以展开进入到主调方的上下文中。 宏的处理主要分为两步,宏展开(构造表达式原创 2012-11-23 23:14:19 · 585 阅读 · 0 评论 -
闭包实践(一)------sicp图形语言--picture
一、问题的定义和作用 1.定义:Peter J. Landin 在1964年将术语 闭包 定义为一种包含 环境成分 和 控制成分的实体,用于在他的SECD 机器上对表达式求值。 2. 作用:通过构造出某种同类的东西,支持任意和无限次的复合。 实践一 上面的图形(P(n))可以通过这种方法构造:首先在右边画一个长方形(Rn),然后左边是由两个上下临界的图形(P(n原创 2012-11-02 15:12:50 · 803 阅读 · 0 评论 -
lisp实现自动递归---SICP不确定性计算
一、递归的需求 1. 树的遍历,我们首先需要判断当前节点是否为叶子结点,如果不是叶子结点,则需要在左右子树上递归的去遍历; 2.迷宫的出口求解问题,当前位置是否为出口,如果不是,则需要在上下左右四个方法去递归搜索; 3.在微博看到一个爱因斯坦问题,如下: 1、在一条街上,有5座房子,喷了5种颜色。 2、每个房里住着不同国籍的人 3、每个人喝不同的饮料,抽不同品牌的香烟,养不原创 2012-11-26 11:01:41 · 1076 阅读 · 0 评论 -
on-lisp要点(一)
chapter-2 1.symbol-value & symbol-function lisp中可以通过symbol-value, symbol-function从对应的symbol获取变量值和函数值。 (defun double (x) (* x 2)) (defvar double 0) (setq double 2) (symbol-value 'double) (symbol-f原创 2012-11-23 00:08:42 · 664 阅读 · 0 评论 -
闭包实践(二)--函数复合
实践一 语言:scheme lisp中每个函数形成了一个闭包,函数和函数复合形成了一个新的闭包,然后和其他的函数符合,可以组成更加复杂的闭包。 (define (compose f g) (lambda (x) (f (g x))))将两个函数复合,形成的新函数接受一个参数 (define (compose-n f n) (if (= n 1)原创 2012-11-14 23:39:21 · 486 阅读 · 0 评论 -
99道lisp练习题----(三)格雷码和haffman树
P49 (**) Gray code.(格雷码问题) An n-bit Gray code is a sequence of n-bit strings constructed according to certain rules. For example, n = 1: C(1) = ['0','1']. n = 2: C(2) = ['00','01','11','10']. n =原创 2013-03-08 17:14:41 · 1067 阅读 · 0 评论