如何在Haskell中更改函数的值并返回此函数?

时间:2015-04-17 21:15:08

标签: function haskell

我想在Haskell中执行以下操作:

myFunc 1 = 0
myFunc 2 = 1

changeMyFunc:: (Integer -> Integer) -> Integer -> Integer -> (Integer -> Integer)
changeMyFunc x y z = undefined

-- change value of function x at position y to value z and return this function
-- this would make: (changeMyFunc myFunc 1 5) 1 == 5

这是我得到它的程度:

changeMyFunc2:: (Integer -> Integer) -> Integer -> Integer -> (Integer -> Integer)
changeMyFunc2 x y z | y == z = myFunc
                | y /= z = myFunc where myFunc y = 12
                | otherwise myFunc

最后一行导致:输入'|'上的解析错误 如何使用where检查多个案例?

1 个答案:

答案 0 :(得分:2)

定义changeMyFunc x时,第一步就是返回原始myFunc x本身。这几乎可以帮助你。

然后将其分为两种情况:一种情况为x == y,另一种情况为x /= y,其中y是您的特殊输入。在每种情况下changeMyFunc x应该返回什么?

更新了提示

目前,您正在接受参数xyz。尝试用这个来代替:

changeMyFunc f y z x
    | fill this part in yourself

f是原始功能。 y是特殊输入,z是特殊输出。 x是您正在定义的新changeMyFunc函数的参数。

  

有关高阶函数的详细信息,请参阅How do you use a function inside arguments in haskell?

考虑一下你应该比较哪些args,以及每种情况下输出应该是什么。 (提示:我已经给出了上面的部分答案。)

然后你可以用它来测试它:

*Main> let successor = (+) 1
*Main> let successor' = changeMyFunc successor 1 1000
*Main> successor' 100
101
*Main> successor' 101
102
*Main> successor' 500
501
*Main> successor' 1
1000

解决方案

  

changeMyFunc :: (Integer -> Integer) -> Integer -> Integer -> (Integer -> Integer)
 changeMyFunc f y z x
  | x == y = z
  | otherwise = f x