Functional programming 函数式编程和术语重写之间的联系

Functional programming 函数式编程和术语重写之间的联系,functional-programming,rewriting,Functional Programming,Rewriting,我对术语重写系统的使用很感兴趣,我发现术语重写“有助于功能程序的基本推理”,但我不理解它的含义。我没有做过函数式编程,但我知道主要的原则,比如纯函数和不变性。不过,我还是不明白基本推理指的是什么。此外,它是否与术语重写的倒转有某种联系?它们是“联系”的,因为它们依赖于相同的概念: 在术语重写中,计算是通过搜索表达式中的模式来执行的,然后将匹配的表达式(或子表达式)更改为其他表达式(重写)。作为一个非常简单的例子,表达式2+3可以转换为表达式5,因为有一个重写规则(我们称之为“数字加法”)知道如

我对术语重写系统的使用很感兴趣,我发现术语重写“有助于功能程序的基本推理”,但我不理解它的含义。我没有做过函数式编程,但我知道主要的原则,比如纯函数和不变性。不过,我还是不明白基本推理指的是什么。此外,它是否与术语重写的倒转有某种联系?

它们是“联系”的,因为它们依赖于相同的概念:

  • 在术语重写中,计算是通过搜索表达式中的模式来执行的,然后将匹配的表达式(或子表达式)更改为其他表达式(重写)。作为一个非常简单的例子,表达式
    2+3
    可以转换为表达式
    5
    ,因为有一个重写规则(我们称之为“数字加法”)知道如何执行这种转换

  • 在函数式编程语言中,函数是语言的“第一类公民”,可以说是“一切都是表达式,包括函数”。因此,可以将函数指定为函数(或过程)调用的参数,或者函数(或过程)可以返回函数(),就像使用基元类型一样

此外,由于在术语重写中“一切都是表达式”,它们中的每一个都必须产生一个值,就像函数一样,因此,按术语重写的计算可以被视为函数的连续应用。

它们是“连接”的,因为它们依赖于相同的概念:

  • 在术语重写中,计算是通过搜索表达式中的模式来执行的,然后将匹配的表达式(或子表达式)更改为其他表达式(重写)。作为一个非常简单的例子,表达式
    2+3
    可以转换为表达式
    5
    ,因为有一个重写规则(我们称之为“数字加法”)知道如何执行这种转换

  • 在函数式编程语言中,函数是语言的“第一类公民”,可以说是“一切都是表达式,包括函数”。因此,可以将函数指定为函数(或过程)调用的参数,或者函数(或过程)可以返回函数(),就像使用基元类型一样


此外,因为在术语重写“一切都是表达式”中,它们中的每一个都必须产生一个值,就像一个函数一样,因此一个术语重写的计算可以被视为函数的连续应用。

这可能意味着等式推理。“这被定义为('is equal'),因此无论我们在哪里看到它,都可以用它来代替”一种“基本”推理?例如,我们不能对命令式编程说明同样的事情吗?
x:={print 1;return 1};y:=x+x
。将
y
设置为2,并打印“1”。替换
x
的定义,它将打印“11”。所以,不是同一件事。它可能意味着等式推理。“这被定义为('is equal'),因此无论我们在哪里看到它,都可以用它来代替”一种“基本”推理?例如,我们不能对命令式编程说明同样的事情吗?
x:={print 1;return 1};y:=x+x
。将
y
设置为2,并打印“1”。替换
x
的定义,它将打印“11”。所以,不是同一件事。