默认情况下,具有不变变量的语言,例如Haskell

|| 我对Haskell着迷的一件事是函数和变量如何相同。在大多数语言中,变量保留一个值,而函数执行某些操作,然后最终返回一个值。在Haskell中,您看不到这种差异,并且在使用Haskell之后,回到更多的“传统”编程中,变量与函数或方法不同。如果我想获取一个值,则不必担心它的起源,无论它是常量,可变变量还是复杂计算的结果!在Haskell中,变量只是0元函数。 许多面向对象的语言都具有一些差距。 任何人都可以使用类似于Haskell的系统指示其他任何语言吗?由于引用透明性,我以为功能语言很常见,但事实并非如此。例如,在Lisp中,您有
(defun)
来显式声明函数。     
已邀请:
  任何人都可以使用类似于Haskell的系统指示其他任何语言吗? 默认情况下,几种语言具有不可变的变量(即,数学意义上的变量): 哈斯克尔(很明显), 清洁, Erlang, ML。 其他人则通过\'const \'或\'val \'声明(Scala,C)来鼓励这种行为。 在许多功能语言中,可变值只能通过显式的“ ref”或“ var”声明来引入。     
在Clojure中,defn只是要定义的宏。变量是不可变的,并且它们包含值。函数就像其他任何类型的值一样,都是值。值实际上是否为函数(Fn)并不重要,因为该类型的值是否实现了函数接口(IFn)。 为了澄清最后一点,Java基本数组不是函数。我可能希望将其视为Clojure序列,我可以创建一个包装器类型,使我可以在原始数组上呈现该接口(ISeq)。我也可以使用包装器类型实现IFn,然后也可以将原始数组视为函数。
(def x (wrap-prim-array ...))

(nth x 0) ; idiomatic random access
(x 0)     ; used as a function
    
不要忘记Javascript。
var a = function(x) { return (x + 1) };
var b = a(1);
// b == 2 here.
是完全合法的。     

要回复问题请先登录注册