是否存在类似于 Haskell 的语言,其中方程允许任意左侧?

问题描述 投票:0回答:1

在 Haskell 中,您可以通过左侧构造函数进行模式匹配的方程来定义算法。例如:

data Nat = S Nat | Z

double :: Nat -> Nat
double Z     = Z
double (S x) = S (S x)

现在,想象一下 constructor 限制被取消,并且我们允许任意左侧:

foo :: Nat -> Nat
foo (double x) = x + 1

在这种情况下,我们不是匹配 x

successor
,而是匹配 x
double
,其中
double
是任意函数,而不是构造函数。因此,要计算
foo 10
,运行时需要将其与
foo (double x)
进行匹配,通过统一,这意味着
x = 5
,因此,
foo (double 5) = foo 10 = 5 + 1 = 6
;即
6
是最终结果。当然,这个想法不切实际,因为:

  1. 计算需要统一,这使得语言变得极其缓慢。

  2. 可能会写出荒谬的方程,因此必须以某种方式处理。

然而,这个概念是否已经在任何现有语言中被探索和/或实现了?

haskell functional-programming
1个回答
0
投票
foo (x*y) = (x, y)

print $ foo 2519590847565789349402718324004839857142928212620403202777713783604366202070\
       7595556264018525880784406918290641249515082189298559149176184502808489120072\
       8449926873928072877767359714183472702618963750149718246911650776133798590957\
       0009733045974880842840179742910064245869181719511874612151517265463228221686\
       9987549182422433637259085141865462043576798423387184774447920739934236584823\
       8242811981638150106748104516603773060562016196762561338441436038339044149526\
       3443219011465754445417842402092461651572335077870774981712577246796292638635\
       6373289912154831438167899885040445364023527381951378636564391212010397122822\
       120720357
© www.soinside.com 2019 - 2024. All rights reserved.