五千年(敝帚自珍)

主题:计算机编程的经典SICP -- 南山东沟

共:💬13 🌺64
全看分页树展 · 主题 跟帖
家园 在Lisp中,函数是一等公民

既然参数可以是函数指针,返回值同样也可以是函数指针,因此可以有func()();这样的调用。返回函数的函数在C语言中很少见,在一些函数式编程语言(例如LISP)中则很常见,基本思想是把函数也当作一种数据来操作,输入、输出和参与运算,操作函数的函数称为高阶函数(High-order Function)。

回调函数

C语言之类的贴近机器的语言中往往有函数和运算符的区别,表达式中还有什么运算符优先级。但是Lisp中这些都是函数,加法是加法函数,减法是减法函数。当b大于0的时候,

(if (> b 0) + -)的返回值就是加法函数+,反过来b小于等于0的时候,(if (> b 0) + -)的返回值就是加法函数-。

于是((if (> b 0) + -) a b)在b大于0的时候,就是a和b的和(+ a b);在b小于等于0的时候,就是a减去b(- a b);这样就可以实现一个a+b的绝对值的函数

(define (a-plus-abs-b a b)

((if (> b 0) + -) a b))

【声明函数a-plus-abs-b,具有a和b两个参数,返回值是((if (> b 0) + -) a b)】

全看分页树展 · 主题 跟帖


有趣有益,互惠互利;开阔视野,博采众长。
虚拟的网络,真实的人。天南地北客,相逢皆朋友

Copyright © cchere 西西河