最左侧最外侧还原(Haskell)

最左侧最外侧还原(Haskell),haskell,reduction,Haskell,Reduction,我得到的任务是在下面的表达式上使用最左边的最外层缩减: f inc expo 9 (f (*2) expo 3 1) inc的定义如下: inc :: Int -> Int inc x = x+1 expo :: Int -> Int expo x = expo (x*2) 世博会的定义是: inc :: Int -> Int inc x = x+1 expo :: Int -> Int expo x = expo (x*2) f作为: f :: (In

我得到的任务是在下面的表达式上使用最左边的最外层缩减:

f inc expo 9 (f (*2) expo 3 1)
inc的定义如下:

 inc :: Int -> Int
 inc x = x+1
expo :: Int -> Int
expo x = expo (x*2)
世博会的定义是:

 inc :: Int -> Int
 inc x = x+1
expo :: Int -> Int
expo x = expo (x*2)
f作为:

f :: (Int->Int) -> (Int-> Int) -> Int -> Int -> Int
f g h a b = g(a-b)
我完全不知道从哪里开始减少更多的功能。我读到提示,redex不包含在任何其他redex中,但我不明白;(

我将非常感谢每一个提示/帮助。

第一次(最左边,最外面)减少

f inc expo 9 (f (*2) expo 3 1)
是应用
f
的定义,一次,其中
fghab=g(a-b)
,因此我们使用
g
作为
inc
a
作为
9
b
作为
(f(*2)expo 3 1)
,给出

inc(9 - (f (*2) expo 3 1))

现在我们实际上已经完成了我们被问到的问题。这是最左边、最外层的缩减。请注意,我们不需要使用关于其他函数的任何事实,这可能是暗示的意思。

从您对
expo
的定义来看,它永远不会终止,事实上,它会,因为expo(
h
f
的定义中)从未使用过(即从未应用于任何东西)。这意味着我用f函数开始缩减?意味着inc是“g”,expo是“h”,9是“a”,其余的是“b”?看看方程
fghab=g(a-b)
看看fincexpo 9(f(*2)expo 3 1中的ghab是什么。这将使用
inc
expo
9
(f(*2)expo 3 1)
生成一些表达式。下一步是执行减少(替换,如果愿意),如果没有减少,则无法计算g(a-b)。依此类推,直到得到类型
Int
(或一个函数,但在这种情况下你会得到一个Int)@fjh英语是一种令人讨厌的语言。我的意思是“从你对
expo
expo
的定义来看,它永远不会终止”