Lisp.作为属性的函数
来源:互联网 发布:linux apt安装jdk1.8 编辑:程序博客网 时间:2024/05/05 09:09
函数是Lisp对象的事实允许我们写出在运行时被扩展的程序。假设我们想要写一个函数,这个函数接受动物的类型作为参数并做一些对应的操作。在大多数语言中,要做到这点就是用case语句,我们在Lisp中也可以这样做:
(defun behave (animal)
(case animal
(dog (wag-tail)
(bark))
(rat (scurry)
(squeak))
(cat (rub-legs)
(scratch-carpet))))
如果我们向要加入新的动物类型呢?如果我们计划加入新的动物,我们最好像下面这样定义behave:
(defun behave (animal)
(funcall (get animal 'behavior)))
并将动物各自的行为定义为一个函数,比如,对于他们名字的列表:
(setf (get 'dog ''behavior)
#'(lambda () (wag-tail)
(bark)))
这样,我们需要做的就是定义新的属性。没有函数需要被重写。
尽管第二种方式更加灵活,但是看上去有些慢。确实是有点慢。如果速度是非常重要的,我们还是使用结构体,特别的,使用编译,而不是解释函数。通过结构体和编译的函数,更加灵活的代码类型可以达到或者超过使用case的版本。
这样使用函数对应于面向对象编程的方法。通常的,一个方法就是一个对象的属性函数,那就是我们所做的。如果我们将继承加入到这个模型中,我们将获得面向对象编程的所有要素。25章将展示用非常少得代码就可以搞定这点。
面向对象语言最大的卖点之一就是使程序可扩展。这在Lisp世界里并不稀奇,可扩展性就是默认的。如果扩展不大量的依赖于继承,那么纯Lisp已经够了。
- Lisp.作为属性的函数
- Lisp.函数作为数据
- Lisp.函数作为数据
- Scheme和Common Lisp中对函数作为变量和返回值的处理方法差异
- common lisp 中宏定义时不能使用#'? 形式的函数作为参数
- 自定义Lisp的list函数
- Common Lisp函数的基础知识
- Lisp.函数
- Lisp.函数
- Lisp 函数
- 如何查看common lisp函数的文档?
- Lisp函数apply和funcall的比较
- 如何查看 Common Lisp 的标准函数
- Lisp中基础函数的意思
- 查看common lisp函数的文档
- R函数式的列表-Lisp表达方式
- 属性文字转TEXT文本的lisp程序
- 属性定义转换普通文字的Lisp代码
- 查找 WSDL 服务接口描述
- 最近看到的验证码资料
- 有效的使用和设计COM智能指针——条款15:以原则中的优先级作为取舍的依据
- LVM image mount/umount
- 非安装版Tomcat作为Windows服务启动配置
- Lisp.作为属性的函数
- Flash 遮盖DIV 解决方案
- sqlite笔记
- NoClassDefDoundErr与ClassNotFoundException区别
- PowerDesigner12.5 常用功能设置
- 有效的使用和设计COM智能指针 ——条款16:智能指针的引入不能违反COM引用计数规则
- linux下安装expect解决方法
- 开启 openssl
- 离开csdn的日子里