我在Haskell中定义了一个函数,该函数应该是正方形,然后在给定列表中的所有数字上加1.我想用函数组合编写该函数但不幸的是它不适用于dot beetwen函数但它在我写的时候有效我的函数括号.我不明白为什么它不适用于dot或者更确切地说它不适用于函数组合?
square :: Int -> Int
square x = x * x
funSqr :: [Int] -> [Int]
funSqr xs = [(square x) | x <- xs]
funAdd1 :: [Int] -> [Int]
funAdd1 xs = [(x + 1) | x <- xs]
funFoldr :: [Int] -> Int
funFoldr [] = 0
funFoldr (x:xs) = x + (funFoldr xs)
fun :: [Int] -> Int
fun xs = funFoldr(funAdd1(funSqr xs))
Run Code Online (Sandbox Code Playgroud)
但
fun :: [Int] -> Int
fun xs = funFoldr.funAdd1.funSqr xs --Why …Run Code Online (Sandbox Code Playgroud) 我已经定义了一个函数f1和f2,因此我可以使用函数composition(fkomp),它应该使用f1和f2来计算2^x给定List中的每个元素.
f1 :: Int -> Int
f1 x = product (replicate x 2)
f2 :: (a -> b) -> [a] -> [b]
f2 f xs = [f x | x <- xs]
fkomp :: [Int] -> [Int]
fkomp xs = f2 f1 $ xs
Run Code Online (Sandbox Code Playgroud)
它的工作原理,但问题是,我无法用组合编写我的代码:
fkomp xs = f2.f1 $ xs
Run Code Online (Sandbox Code Playgroud)
我一直在键入每一个组合,但它不适用于组合.
有人可以减轻我的道路吗?
非常感谢
我必须从Haskell中的给定函数中找到最通用的类型,或者更确切地说找到两个函数的"产品"的最一般类型(如果存在).我不确定但也许我应该使用Robinson统一算法,但我无法理解它.我需要一步一步的详细解决方案,所以我能理解.
功能 :
map :: (a ? b) ? [a] ? [b]
iterate :: (a ? a) ? a ? [a]
Run Code Online (Sandbox Code Playgroud)
如何找到最常用的类型
map iterate iterate map这不是作业.