append构建动态函数

append我常用于连接两个string或者list,其实还可以这样用,将两个list连接成一个lambda表达式:

> (append (lambda (x)) ‘((add x 1)))
(lambda (x) (add x 1))

append的第一个参数是(lambda (x)) 一个List,有两个元素,第二个参数也是一个list,子元素也是一个list

拼接后就是变成了一个完整的lambda表达式,接受x为参数,并且能够加1后返回。

进一步考虑, 这里add是写死的,如果现在将(append...)变为某个函数的body,将add作为函数参数传递进来,看看会有什么效果。

> (define (foo op) (append (lambda (x)) (list (list op ‘x 1))))
(lambda (op) (append (lambda (x)) (list (list op ‘x 1))))
> (foo ‘add 2)
(lambda (x) (add x 1))

注意:

1. 这里用list代替了‘, 因为实际使用中我发现 op参数传递会有问题,用list就好

2. foo函数实际上是一个lambda表达式,函数体是(append...)语句,该函数体在运行时会返回(append...)的结果

也就是(lambda (x) (add x 1))

本文标题是动态函数,其实指的就是参数可以是运算符,这里(foo op) 参数op就是可以为‘add, 所以foo就是动态函数

进一步改进之,可以foo可以接受一个参数p:

> (define (foo op p) (append (lambda (x)) (list (list op p ‘x))))
(lambda (op p) (append (lambda (x)) (list (list op p ‘x))))
时间: 2024-10-13 00:01:50

append构建动态函数的相关文章

OPENERP 构建动态视图

来自:http://shine-it.net/index.php/topic,16142.0.html 在openerp展示界面通常是通过定义class的view(xml文件)来实现的. 有时这种方法不能支持用户自定义字段的需求,于是就可以通过重写fields_view_get(). read()来实现. 实例代码 # -*- coding: utf-8 -*- from openerp.osv import osv,fields from lxml import etree from open

Android学习路线(二十)运用Fragment构建动态UI

要在Android系统上创建一个动态或者多面板的用户界面,你需要将UI组件以及activity行为封装成模块,让它能够在你的activity中灵活地切换显示与隐藏.你可以使用Fragment类来创建这些模块,它们能够表现得有些像嵌套的activity,它们定义着自己的布局,管理自己的生命周期. 当一个fragment指定了它自己的布局,它可以在activity中和其他的fragment配置为不同的组合,这样就能够为不同的屏幕尺寸来修改你的布局配置(在小屏幕上一次展现一个fragment,而在大屏

Android学习路线(二十一)运用Fragment构建动态UI——创建一个Fragment

你可以把fragment看成是activity的模块化部分,它拥有自己的生命周期,接受它自己的输入事件,你可以在activity运行时添加或者删除它(有点像是一个"子activity",你可以在不同的activity中重用它).本课将向你展示如何使用Support Libaray继承 Fragment 类来让你的应用能够兼容正在运行Android 1.6的设备. 提示: 如果你决定你的应用需求的最低API级别是11或者更高,那么你不需要使用Support Library,你可以直接使用

[转]C语言构建动态数组完整实例

原文地址:http://www.jb51.net/article/52153.htm 本文以一个完整的实例代码简述了C语言构建动态数组的方法,供大家参考,完整实例如下: ? 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 #include <stdio.h> #include <malloc.h> int main(void) {     int len;     int * arr;     printf("请输入数组长度:&q

js动态函数

最近项目中使用百度模板引擎baiduTemplate.js,使用动态函数解析模板中代码. 通过new Function([arg1,arg2,...,argN,]functionBody)方式实现动态函数调用. 如下: <!doctype html> <html> <head> <script type="text/javascript"> var funBody = "var sum=0;for(var i=1;i<=1

静态函数库和动态函数库

静态函数库是在编译链接时,把库文件代码全部加入到可执行文件中,因此生成的文件比较大,而运行时也就不需要库文件了.Linux中静态函数库的后缀名一般为".a",windows中为".Lib": 动态函数库是在编译链接时没有把库文件代码加入到可执行文件中,而是将要调用的函数所在文件的和该函数在文件中的位置等信息链接进目标程序.Linux中动态函数库的后缀名一般为".so",windows中为".dll".

Android学习路线(二十二)运用Fragment构建动态UI——构建一个灵活的UI

先占个位置,下次翻译 :p When designing your application to support a wide range of screen sizes, you can reuse your fragments in different layout configurations to optimize the user experience based on the available screen space. For example, on a handset devi

Android学习路线(二十三)运用Fragment构建动态UI——Fragment间通讯

先占个位置,下次翻译 :p In order to reuse the Fragment UI components, you should build each as a completely self-contained, modular component that defines its own layout and behavior. Once you have defined these reusable Fragments, you can associate them with

JavaScript之 ------ 函数(一般函数、动态函数、匿名函数)

JavaScript之 ------ 函数(一般函数.动态函数.匿名函数) 函数 一.一般函数 1.格式: function 函数名(形式参数...) { 执行语句: return 返回值: } 函数是多条执行语句的封装体,只有被调用才会被运行. 注意:调用有参数的函数,但没有给其传值,函数一样可以运行,或者调用没有参数的函数,给其传值,该函数也一样运行. 说的简单点:只要写了函数名后面跟了一对小括号,该函数就会运行. 2.函数虽然定义时是声明成两个参数,但调用时却是可以传入任意个 例: ? 1