Literal 和 identifier

literals指那些值就是它本身的符号。而identifier或者叫标示符,是指它们的值是通过literal来表示的。

例如:

  • "hey" (a string)
  • false (a boolean)
  • 3.14 (a real number)
  • [1,2,3] (a list of numbers)
  • (x)=> x*x (a function)
  • /^1?$|^(11+?)\1+$/ (a regexp)
上面列出的6种类型的literals,就表明它们可以对应赋给6种变量或者叫标示符。此外不同语言可以定义不同的literal,提供给程序员使用。如Python的tuple和dict就不包含在上面的例子中。而程序中出现的其他一些符号组合就不能称之为literals,例如:

  • std::cout (an identifier)
  • foo = 0; (a statement)
  • 1+2 (an expression)

这三类与上面6种literals的最大区别是,在编译过程,在它们出现的地方需要再“计算”,一般是“求值”或解引用。而它们的值就是通过literals表现的。因此可以这么说,某程序语言的设计者对literals的种类的划分,决定此种语言的根本特点。也会影响语言的使用者,在编程时对问题的建模的层次。

求值

对变量求值:如果该变量未事先定义,那就会报错。定义变量时,运行时系统会在对应的环境中建立变量的键值对。如果求值操作所在的环境,不是它定义的环境,那么也会报错“未定义变量”。

对函数求值:函数定义了一个抽象模式,包含一系列的操作步骤。对函数的求值,就是按照既定顺序,获取实参,执行这些步骤,然后返回结果。和变量一样,函数也涉及作用域问题。

本质上,操作符和函数是一样的,只不过它们是预先定义在该语言的运行时环境中的。简单的操作符对应单一的机器指令,而复杂的操作符可能需要机器指令的集合,并且需要按照一定顺序。这时,操作符和函数已经没有差别了。函数的抽象层次要高于操作符,因为,函数是操作符、变量和literals的集合,允许用户自定义。



  • 2
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值