相关疑难解决方法(0)

Haskell中的函数组合与元组参数

有时我有两种形式的功能:

f :: a -> (b1,b2)
h :: b1 -> b2 -> c
Run Code Online (Sandbox Code Playgroud)

我需要组合物g.我通过将h改为h'来解决这个问题:

h' :: (b1,b2) -> c
Run Code Online (Sandbox Code Playgroud)

你能告诉我(如果可能的话)一个函数m,这样:

(h . m . f) == (h' . f)
Run Code Online (Sandbox Code Playgroud)

或者另一种处理这种情况的方法.谢谢.

haskell tuples currying function-composition

13
推荐指数
2
解决办法
4585
查看次数

如何在Haskell中将元组返回值转换为"位置"参数?

我理解没有"位置"参数,因为所有函数只接受一个变量并返回一个函数来操作剩余的参数,但这就是我想要做的意思:

从一些函数开始,我用来格式化带有前置项,分隔符和结束项的列表.

Prelude> formatList start end sep xs = start ++ (intercalate . separator ( map show xs )) ++ end
Run Code Online (Sandbox Code Playgroud)

像这样工作:

Prelude Data.List> formatList "(" ")" "," [1..10]
"(1,2,3,4,5,6,7,8,9,10)"
Run Code Online (Sandbox Code Playgroud)

很酷,同样的想法可以用于xml标签:

Prelude Data.List> formatList "<meow>" "</meow>" "" [1..10]
"<meow>12345678910</meow>"
Run Code Online (Sandbox Code Playgroud)

本着重用函数和简洁性的精神,让我们也做到这一点,我们不必通过创建一个函数来生成打开和关闭单词"tag",从而输入meow标记的冗余部分.

Prelude Data.List> tagger tag item = "<" ++ tag ++ ">" ++ item ++ "</" ++ tag ++ ">"
Prelude Data.List> tagger "div" "contents"
"<div>contents</div>"
Run Code Online (Sandbox Code Playgroud)

所以现在制作一些标签制作器,它将返回一个开始和结束我可以为我的formatList函数创建第二个参数:

Prelude Data.List> tagMaker tag = ("<" ++ tag ++ ">", "</" ++ tag ++ …
Run Code Online (Sandbox Code Playgroud)

haskell

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

标签 统计

haskell ×2

currying ×1

function-composition ×1

tuples ×1