Functional programming 是否存在基于事件的异步编程语言?

Functional programming 是否存在基于事件的异步编程语言?,functional-programming,programming-languages,event-based-programming,Functional Programming,Programming Languages,Event Based Programming,我花了一些时间考虑了一种基于事件的编程语言。我的意思是,当你改变一个因变量时,每一个变量都会被更新。例如,考虑终端应用程序的以下伪代码: int a = 5 int b = a + 5 // event which is called every 5 seconds every 5 seconds => { // update a by adding 5 a << a + 5 } // event which is called when the use

我花了一些时间考虑了一种基于事件的编程语言。我的意思是,当你改变一个因变量时,每一个变量都会被更新。例如,考虑终端应用程序的以下伪代码:

int a = 5
int b = a + 5

// event which is called every 5 seconds
every 5 seconds =>
{
     // update a by adding 5
     a << a + 5
}

// event which is called when the user presses enter
on enter =>
{
    println("b = " + b)
}
可通过以下方式对其进行编程:

// two inputboxes and a label
Textbox tb1 = new TextBox() { format = "numeric", value = 5 }
Label lbl1_plus = new Label() { value = "+" }
Textbox tb2 = new TextBox() { format = "numeric", value = 6 }

// and the result
Label lbl1_plus = new Label() { value = "= " + (tb1.value + tb2.value) }
就这样。它有点像excel,但有真正的编程。
有这样的编程语言吗?或者类似的东西?

我没有见过这种确切的语言,但它似乎有点像Prolog和Inform的结合。也就是功能性和基于约束的编程。

有些模糊的相似之处:查看功能性反应式编程的一般情况和具体情况。

简单的选择是使用反应式编程。反应式编程是函数式编程和基于事件的编程的结合。有许多实用程序函数可以让您根据较小的事件定义事件或操作。例如,在您的案例中,您可以定义一个事件
AE
,每次变量
A
发生变化。基于此,您可以触发一个序列,将
a
添加到
B
并打印它。您可以在中看到不同语言的实现列表


更复杂的情况可以通过使用(复杂事件处理)工具来处理。CEP允许您定义基本事件,描述这些事件的复杂模式,并捕获它们的发生。虽然这些工具刚刚开始使用,可能还没有足够成熟的工具,但它们的规格满足您提到的要求。

那么,它怎么知道您可以编辑第一个文本框的值,并且不会在每次重新计算这些表达式时将其重设为5?这就像Haskell命令一样。可能支持这一点。@uliwitness:表达式只在程序开始时计算一次。在此之后,(比如说)vm知道依赖关系,并且只有在依赖值更改时才重新计算依赖关系。因此,在程序启动后,虚拟机将处于“稳定”状态,并且什么也不做,直到发生以下两种情况之一:1。发生一个事件或2个事件。绑定的外部值会更改。在这两种情况下,程序都必须更新到新的稳定状态。就像haskell,直到一个事件发生,在这种情况下,它有并且应该有巨大的副作用。不过,它主要是用于硬件模拟。寻找“反应式编程”。
// two inputboxes and a label
Textbox tb1 = new TextBox() { format = "numeric", value = 5 }
Label lbl1_plus = new Label() { value = "+" }
Textbox tb2 = new TextBox() { format = "numeric", value = 6 }

// and the result
Label lbl1_plus = new Label() { value = "= " + (tb1.value + tb2.value) }