我想在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检查多个案例?
答案 0 :(得分:2)
定义changeMyFunc x
时,第一步就是返回原始myFunc x
本身。这几乎可以帮助你。
然后将其分为两种情况:一种情况为x == y
,另一种情况为x /= y
,其中y
是您的特殊输入。在每种情况下changeMyFunc x
应该返回什么?
目前,您正在接受参数x
,y
,z
。尝试用这个来代替:
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