例如,我会写:
x = 2 y = x + 4 print(y) x = 5 print(y)
它会输出:
6 (=2+4) 9 (=5+4)
此外,是否有任何可能实际有用的情况?
澄清:是的,lambdas等解决了这个问题(他们是我如何得出这个想法); 我想知道是否存在默认的特定语言:不需要或不需要函数或lambda关键字.
Haskell会中途遇见你,因为基本上所有东西都是函数,但变量只绑定一次(意味着你不能x
在同一范围内重新分配).
可以很容易地考虑y = x + 4
变量赋值,但是当你看y = map (+4) [1..]
(这意味着从1向上为无限列表中的每个数字加4)时,现在是y
什么?它是一个无限列表,还是一个返回无限列表的函数? (提示:这是第二个.) 在这种情况下,当利用懒惰时,将变量视为函数可能是非常有益的,如果不是绝对必要的话.
实际上,在Haskell中,您的定义y
是一个不接受任何参数并返回的函数x+4
,其中x
也是一个不带参数的函数,但返回值2.
在具有一阶函数的任何语言中,将匿名函数分配给变量是微不足道的,但对于大多数语言,您必须添加括号以指示函数调用.
示例Lua代码:
x = function() return 2 end y = function() return x() + 4 end print(y()) x = function() return 5 end print(y())
$ lua x.lua 6 9
或者在Python中使用相同的东西(坚持使用一阶函数,但我们可以使用普通整数x
):
x = lambda: 2 y = lambda: x() + 4 print(y()) x = lambda: 5 print(y())
$ python x.py 6 9