声明性编程语言的反馈,资源和信息

时间:2010-11-27 08:22:50

标签: programming-languages language-design lazy-evaluation declarative declarative-programming

1 个答案:

答案 0 :(得分:2)

你肯定想看一下 Haskell 编程语言。

Haskell是非常声明性的,懒惰评估是内置的,甚至存在功能性反应式编程库。但最值得注意的是,Haskell是纯粹的功能,即一切都是

所以问题是Haskell如何处理任何IO产生的必要杂质。

答案非常适合你提出的想法。 Haskell使用一个名为 monads 的数学结构,它基本上代表一个计算产生一些值以及函数bind>>=作为中缀运算符),它对这样的计算进行排序。

让我们看一些IO示例:读取一行并输出你的名字......即使IO是纯粹的,所以你不能简单地运行一些东西。相反,您构建了更大的IO计算

do
    putStr "Enter your name: "
    name <- getLine
    putStrLn ("Hello " ++ name)

看起来非常迫切,但在幕后,它只是

的语法
(putStr "Enter your name: ") >>
(getLine >>= \name ->
 putStrLn ("Hello " ++ name))

现在,您可以以任何您喜欢的方式为任意种类的计算定义此bind / >>=。事实上,你所谈论的一切都可以用这种方式实现 - 甚至是FRP。

尝试在Stackoverflow上寻找monad或Haskell;这个话题有很多问题。 毕竟,它仍然是所有类型检查的,因此编译器可以强制执行。