游走于数据与代码之间

例1:代码作为数据

使用函数(代码)实现序对(数据结构):

def cons(x,y):
	def dispatch(m):
		if m==0:
			return x
		return y
	return dispatch

def car(z):
	return z(0)
def cdr(z):
	return z(1)
测试:
z=cons(3,4)
print car(z),cdr(z)

运行结果:

3 4

有了序对就可以实现更复杂的数据结构,比如list。下面附带实现其简单的3个方法:求长度,遍历,求指定位置元素

def myList(*l):
	if len(l)==2:
		return cons(l[0],l[1])
	else:
		return cons(l[0],myList(*l[1:]))

def lengthOfmyList(mylist):
	if type(cdr(mylist))==type(0):
		return 1+1
	else:
		return 1+lengthOfmyList(cdr(mylist))

def travList(mylist):
	print car(mylist),
	if type(cdr(mylist))==type(0):
		print cdr(mylist)
	else:
		travList(cdr(mylist))

def getElement(cons,index):
	if index==0:
		return car(cons)
	if type(cdr(cons))==type(0):
		if index-1==0:
			return cdr(cons)
	else:
		return getElement(cdr(cons),index-1)
测试:

z = myList(0,1,2,3,4,5,6)
travList(z)
print lengthOfmyList(z)
print getElement(z,5)

运行结果:

0 1 2 3 4 5 6
7
5

例2:数据作为代码

存储在硬盘里的源代码就是普通的字符串数据,但是把它输送给解释器执行时,它就发挥了代码的功能。



其他例子,如:

图灵构造图灵停机问题证明不可判定性命题(将图灵机(函数)编码为其他图灵机的纸带输入(数据))

DNA的自我复制

等等



参考文献:

[1] 《Structure and Interpretation of Computer Programs》 Harold Abelson、Gerald Jay Sussman


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值