use*_*600 6 haskell tuples function
我一直在学习如何在haskell中进行uncurrying和应用$函数,但是我仍然遇到将未经验证的函数转换为不那么神秘的函数的问题.
我给的功能是
apple = map $ uncurry $ flip ($)
Run Code Online (Sandbox Code Playgroud)
我意识到这需要一个元组列表,并将元组中的相应函数应用于变量里面.所以我试着把它重写为
apple ls = foldr function _ ls
where function (a,b) c = (uncurry b) (a,c)
Run Code Online (Sandbox Code Playgroud)
我得到_的错误作为解析错误,我不知道使用哪个起点.我需要制作这种多态,我意识到这很可能不会让它变得不那么神秘.有任何想法吗?他们将非常感激
Apple有这种类型
apple :: [(a, a->b)] -> [b]
Run Code Online (Sandbox Code Playgroud)
我们可以把它重写为
apple ls = map (\(a, f) -> f a) ls
Run Code Online (Sandbox Code Playgroud)
所以写这个foldr
是非常可行的,
apple ls = foldr (\(a, f) rest -> f a : rest) [] ls
Run Code Online (Sandbox Code Playgroud)
或者,我们可以将其重写为pointfree
apple = foldr ( (:) . (uncurry . flip $ ($)) ) []
Run Code Online (Sandbox Code Playgroud)
解析错误的原因是_
"我不关心的变量"的特殊语法.这让你写的东西就像
foo _ _ _ _ a = a
Run Code Online (Sandbox Code Playgroud)
并没有得到重复变量的错误.基本上我们只是_
用起始的空列表填写并修复,function
以便它附加到c
而不是尝试应用它a
.
如果我想以最清晰的方式写这个,那就是原作
apple = map . uncurry . flip $ ($)
Run Code Online (Sandbox Code Playgroud)
很好.
归档时间: |
|
查看次数: |
210 次 |
最近记录: |