科技行者

行者学院 转型私董会 科技行者专题报道 网红大战科技行者

知识库

知识库 安全导航

至顶网软件频道基础软件从表达式到函数:表面的简洁

从表达式到函数:表面的简洁

  • 扫一扫
    分享文章到微信

  • 扫一扫
    关注官方公众号
    至顶头条

lisp/scheme对函数的声明与使用带来了一种形式上的简洁。

作者:aimingoo 来源:CSDN 2008年2月1日

关键字: 函数 表达式

  • 评论
  • 分享微博
  • 分享邮件

scheme/lisp中,(基于运算元、运算符的)表达式运算是一个语法基础,但它们被称为函数式语言而非表达式语言。那么,它们是如何解释函数式语言的呢?

一个lisp的函数在语法上应当书写为如下格式:
----------------
((lambda (p1...pn) e) a1...an)
----------------

这是什么意思呢?其实,这其中的p1..pn为形式参数,而a1..an为实际参数,而lambda则是一个从天上掉下来的概念,它被用来作为一个函数标识符的命名——就好象四则运算中的x,y,z只是命名一样。换成JavaScript的语法,就是这样:

----------------
function lambda(p1,p2) { // ... pn
  e
}
lambda(a1,a2); // ... an
----------------

当然,javascript作为函数式语言,你也可以声明即调用。如下:

----------------
(function lambda(p1,p2) {
  e
})(a1,a2))
----------------

所以,事实上较规范的lisp函数调用语法风格与上面的并没有什么不同:

----------------
((lambda (p1,p2)
  e
 ) a1 a2)
----------------

按照约定,e是一个或一组表达式。这里就回到上一篇文章(在这里)说的了:表达式是语言基础:
-----------
(symbol)
-----------

在表达式、值(以及变量)、函数等基本概念上,javascript与lisp/scheme没有什么不同。不过,后者是面向表(list,一个值或函数的序列)来处理的,而javascript则面向关联数组(属性包,一个“名-值”对的表)。查看本文来源



    • 评论
    • 分享微博
    • 分享邮件
    邮件订阅

    如果您非常迫切的想了解IT领域最新产品与技术信息,那么订阅至顶网技术邮件将是您的最佳途径之一。

    重磅专题
    往期文章
    最新文章