主题:计算机编程的经典SICP -- 南山东沟
共:💬13 🌺64
既然参数可以是函数指针,返回值同样也可以是函数指针,因此可以有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)】
- 相关回复 上下关系6
压缩 2 层
🙂大部分编程语言都是定义计算过程 8 南山东沟 字625 2020-06-30 14:45:15
🙂多谢介绍! 1 陈王奋起 字18 2020-06-30 16:41:18
🙂另外,Lisp还是Emacs的脚本语言 1 杨微粒 字2464 2020-06-30 13:00:50
🙂在Lisp中,函数是一等公民
🙂陈王兄好,我也是外行 3 杨微粒 字671 2020-06-30 12:45:30
🙂对计算机语言来说 3 沉宝 字81 2020-06-30 12:21:36