Skip to main content

HAVE YOU READ YOUR SICP TODAY?

·80 words·1 min
Table of Contents

SICP围绕抽象这个问题展开了深刻的讨论。 为了更加通俗易懂,我这里使用python来表达(原书使用Scheme) 首先看一个例子,我们如何来表达分数这种数据结构

#

class Fraction(object):
	def __init__(self, x, y):
		self.numer = x
		self.denom = y

	def __add__(self, other):
		return self.__class__(other.denom*self.numer+self.denom*other.numer, other.denom*self.denom)

	def __str__(self):
		return '{0}/{1}'.format(self.numer, self.denom)

过程 #

def fraction(numer, denom):
	def dispatch(m):
		if m==0:
			return numer
		elif m==1:
			return denom
		else:
			raise IndexError
	return dispatch


def add(x, y):
	return fraction(x(0)*y(1)+y(0)*x(1), x(1)*y(1))

def display(f):
	return '{0}/{1}'.format(f(0),f(1))

方法2体现了数据也可以用过程来表现,这种程序设计风格也称为消息传递。如果你觉得这种思维还不足以令人称奇,那么请考虑,我们是否需可以完全没有数。下面代码实现了0和加1的操作

(define zero (lambda (f) (lambda (x) x)))
(define (add-1 n) lambda (f) (lambda (x) (f ((n f ) x)))))

这一表示形式称为Chruch Numerals。