SICP:元循环求值器(Python实现)】的更多相关文章

#lang scheme (require rnrs/base-6) (require rnrs/mutable-pairs-6) (define (eval exp env) (cond ((self-evaluating? exp) exp) ;自求值 ((variable? exp) (lookup-variable-value exp env)) ;变量 ((quoted? exp) (text-of-quotation exp)) ;引用 ((assignment? exp) (eva…
http://codercdy.com/openglxue-xi-bi-ji-qiu-zhi-qi-he-nurbs/ 在最底层,图形硬件所绘制的是点.直线和多边形(通常是三角形和四边形).平滑的曲线或表面是通过使用大量的微小线段或多边形模拟的.但是,从数学角度而言,许多非常实用的曲线和表面可以用少许几个参数(例如控制点)来描述.保存一个表面的16个控制点要比保存1000个三角形以及这些三角形每个顶点的法线向量信息所需要的空间要少的多.另外,这1000个三角形只能对真正的表面进行近似的模拟,而这…
最近跟着(How to Write a (Lisp) Interpreter (in Python))使用python实现了一个简易的scheme解释器.不得不说使用python这类动态语言实现不要太方便. 解释器的核心实际就是2个部分: eval 在环境里求值表达式 apply 将一个过程应用于一组参数 eval.apply 这两个规则描述了求值过程的核心部分,这是任何解释器的基本循环.在这一循环中表达式在环境中的求值被规约到过程对实际参数的应用,而这种应用又被规约到新的表达式在新的环境中的求…
简介¶ Aviator是一个高性能.轻量级的java语言实现的表达式求值引擎,主要用于各种表达式的动态求值.现在已经有很多开源可用的java表达式求值引擎,为什么还需要Avaitor呢? Aviator的设计目标是轻量级和高性能 ,相比于Groovy.JRuby的笨重,Aviator非常小,加上依赖包也才450K,不算依赖包的话只有70K:当然,Aviator的语法是受限的,它不是一门完整的语言,而只是语言的一小部分集合. 其次,Aviator的实现思路与其他轻量级的求值器很不相同,其他求值器一…
绪论 我们在第一章引进复合过程时,采用了求值的代换模型定义了将过程应用于实参(arguments)的意义: 将一个复合过程应用于一些实参,也就意味着用实参替换过程体里对应的形参(formal parameters)之后,求值这个过程体. 但正如我们在上一章博客<SICP:赋值和局部状态(Python实现)>中所讲的,一旦我们把赋值引入程序设计语言之后,这一定义就不再合适了.由于赋值的存在,变量已经不能再看作仅仅是某个值的名字,此时的变量必须以某种方式指定了一个"位置"(pl…
斐波那契数列(Fibonacci sequence),又称黄金分割数列,也称为"兔子数列":F(0)=0,F(1)=1,F(n)=F(n-1)+F(n-2)(n≥2,n∈N*).例如 1, 1, 2, 3, 5, 8, 13, 21, 34, 55, 89, 144, 233,377,610,987,1597,2584,4181,6765,10946,17711,28657,46368........这个数列从第3项开始,每一项都等于前两项之和,而且当n趋向于无穷大时,前一项与后一项的…
定义: 中缀表达式: 在通常的表达式中,二元运算符总是置于与之相关的两个运算对象之间,这种表示法也称为中缀表达式 后缀表达式: 又叫逆波兰表达式 ,不包含括号,运算符放在两个运算对象的后面,所有的计算按运算符出现的顺序,严格从左向右进行(不再考虑运算符的优先规则,如:(2 + 1) * 3 , 即2 1 + 3 * 一个字符串表达式s = “9 + ( 3 - 1 ) * 3 + 10 / 2”)求值的过程分为两步 (一) 将 中缀表达式s变为后缀表达式s_after = "9 3 1 - 3…
1 Stream Stream 是 Java 8 提供的一系列对可迭代元素处理的优化方案,使用 Stream 可以大大减少代码量,提高代码的可读性并且使代码更易并行. 2 迭代 2.1 需求 随机创建int类型的数组,计算数组中各个元素的总和 2.2 思路 2.2.1 外部迭代 通过for循环迭代数组 2.2.2 内部迭代 先将数组转化成流 -> 在通过流的相关操作来实现 2.2.3 外部迭代和内部迭代 外部迭代式串行的,如果要实现并行需要自己编写代码实现:内部迭代实现并行操作只需要调用一个pa…
在Java语言学习中,通常不太关注求值规则. (2+4*6)*(3+5+7)这样的组合式的求值规则.通常归结为优先级问题: if.for等的求值规则通常归结为语义. 函数式编程语言的Scheme,将这些归结为求值规则.依照丘奇的λ演算的函数应用:A.B是λ表达式,则 (A B) 也是λ表达式.表示将实參B带入函数A中. 问题是:实參B带入函数A中时是否须要对实參B求值呢? applicative-order Vs.normal-order ''evaluate the arguments and…
绪论 到目前为止,我们已经使用过的所有复合数据,最终都是从数值出发构造起来的(比如我们在上一篇博客<SICP 2.2: 层次性数据和闭包性质(Python实现)>所介绍的链表和树就基于数来进行层次化构造).在这一节里,我们要扩充所用语言的表达能力,引进将任意符号作为数据的功能. 2.3.1 Scheme语言中的引号 在<SICP>原书采用的Scheme语言(Lisp的一种方言)中,要想表示诸如(a b c d)这种包含着符号的表非常简单,可以直接对数据对象加引号.例如在Scheme…