zoukankan      html  css  js  c++  java
  • 从表达式到函数:表面的简洁

    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则面向关联数组(属性包,一个“名-值”对的表)。

  • 相关阅读:
    再也不买仙剑正版盘了
    如果能边睡觉边上网多好
    不服
    <转>猛兽多是懒汉
    窗体中实现按 回车键 跳到下一个可选的TabIndex控件
    c# 索引器基础理论
    软件加密技术和注册机制入门介绍
    c# 属性 
    异常的一些基础知识
    关于MessageBox.Show的使用
  • 原文地址:https://www.cnblogs.com/encounter/p/2188659.html
Copyright © 2011-2022 走看看