最左侧最外侧还原(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
的定义来看,它永远不会终止”