小编Vuc*_*ena的帖子

我应该如何使用函数组合在Haskell中定义或编写我的函数?

我在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)

haskell function composition pointfree

3
推荐指数
1
解决办法
95
查看次数

Haskell函数组成

我已经定义了一个函数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 function composition

1
推荐指数
1
解决办法
152
查看次数

Haskell中两个函数的最常见类型的"产品"

我必须从Haskell中的给定函数中找到最通用的类​​型,或者更确切地说找到两个函数的"产品"的最一般类型(如果存在).我不确定但也许我应该使用Robinson统一算法,但我无法理解它.我需要一步一步的详细解决方案,所以我能理解.

功能 :

map :: (a ? b) ? [a] ? [b] 
iterate :: (a ? a) ? a ? [a]
Run Code Online (Sandbox Code Playgroud)

如何找到最常用的类型

  1. map iterate
  2. iterate map

这不是作业.

haskell types type-inference unification

0
推荐指数
1
解决办法
535
查看次数