3.3.4数字电路的模拟器(代码加注释)
#lang sicp #| 假定已经有连线(导线),与,或,非,门这些构造电路的基本元素,借助它们构造半加器和全加器 |# (define (half-adder a b s c);;半加器 (let ((d (make-wire)) (e (make-wire))) (or-gate a b d) (and-gate a b c) (inverter c e)
ワクワク
#lang sicp #| 假定已经有连线(导线),与,或,非,门这些构造电路的基本元素,借助它们构造半加器和全加器 |# (define (half-adder a b s c);;半加器 (let ((d (make-wire)) (e (make-wire))) (or-gate a b d) (and-gate a b c) (inverter c e)
在本次实例中只考虑实现多项式的加法与乘法功能,同时未定元(自变量)也只有一个。在书中,这一次实例还有其他部分,比如嵌入安装包等。但我在书上没有找到如何构造出操作表格,放入,取出的操作,只是假定它可以实现。我也不清楚这一种数据结构如何实现,所以跳过了这一部分,只完成了多项式加法与乘法的功能。;;前置要求:仅考虑加法和乘法,有相同未定元,项表按增序排列 ;;多项式算术 ;;首先假定多项式为pol
哈夫曼树用于给字符编码,其中哈夫曼树方法能够对于同样的信息谁用更少(或者说最少)的二进制位。其算法具体思想不作赘述,主要在于代码的实现#lang sicp ;;首先思考如何表示树和叶 ;;以下是叶子的表示 (define (make-leaf symbol weight);;构造一个叶子 (list 'leaf symbol weight) ) (define (leaf? objec
集合支持一系列的操作,同时也就可以把集合定义为一组可以作用于集合的操作。分别是判断元素是否存在于集合里的方法,插入,求交,求并方法一:把集合表示成未排序的表。这种方法时间复杂度较高,基础操作element-of-set? 增长阶是线性的。#lang sicp (define (element-of-set? x set) (cond ((null? set) false) ((
像之前一样,我们先假设已经有了一种表达代数表达式的方式,同时有相应的构造函数,选择函数和谓词。在此基础上根据求导法则完成符号求导的操作。做完这些后,我们再去实现代数表达式的定义与其支持的操作。完成这些还不够,使用的效果不如预期,这也是因为表达式是需要化简的。为了实现化简,我们对求和&&求乘积的方法进行修改。以上是整体的思路,接下来是代码的具体实现。#lang sicp (define (deriv