当前时区为 UTC + 8 小时



发表新帖 回复这个主题  [ 7 篇帖子 ] 
作者 内容
1 楼 
 文章标题 : 这段 Haskell 如何弄成 point-free 的?
帖子发表于 : 2012-03-05 21:38 
头像

注册: 2009-04-11 23:46
帖子: 4130
系统: Arch Linux
送出感谢: 11
接收感谢: 124
[haskell]
addNumber :: String -> String
addNumber s = unlines $ zipWith (numberWithIndent (getIndent ls) (nrWidth $ length ls)) [1..] ls
where ls = lines s
[/haskell]


_________________
我的博客 https://blog.lilydjwg.me/
提问的智慧
Arch Linux 中文论坛

我的vimrc: https://git.io/vimrc


页首
 用户资料  
 
2 楼 
 文章标题 : Re: 这段 Haskell 如何弄成 point-free 的?
帖子发表于 : 2012-03-11 22:23 
头像

注册: 2008-12-28 16:01
帖子: 728
送出感谢: 2
接收感谢: 15
好多括号,我喜欢。你应该把美元符改成括号,这样就更漂亮了。 :em11


_________________
爱因斯坦会弹钢琴
爱因斯坦会拉小提琴
爱因斯坦会骑自行车


页首
 用户资料  
 
3 楼 
 文章标题 : Re: 这段 Haskell 如何弄成 point-free 的?
帖子发表于 : 2012-03-22 12:55 
头像

注册: 2009-07-25 1:57
帖子: 701
送出感谢: 5
接收感谢: 13
[haskell]
addNumber :: String -> String
addNumber = unlines . (\e -> zipWith (numberWithIndent (getIndent e) (nrWidth $ length e)) [1..]) . lines
[/haskell]

整成这种?难读不少阿,还有就是函数写成这种形式,如果不显式注明签名式的话,而参数又是多态的话,可能会遇到Monomorphism Restriction方面的错误,不知道的话,很难debug。point free除非是那种很短的语句,否则没太大意思的。


_________________
https://github.com/tangboyun
http://tangboyun.is-programmer.com/
提问的智慧————Eric Steven Raymond
回答的智慧————Andrew Clarke
吾尝终日而思矣,不如须臾之所学也;吾尝跂而望矣,不如登高之博见也。
急急急标题什么的,最讨厌了!
急急复急急,急急何其多,我生待急急,万事急急急。


页首
 用户资料  
 
4 楼 
 文章标题 : Re: 这段 Haskell 如何弄成 point-free 的?
帖子发表于 : 2012-03-22 14:32 
头像

注册: 2009-04-11 23:46
帖子: 4130
系统: Arch Linux
送出感谢: 11
接收感谢: 124
tangboyun 写道:
[haskell]
addNumber :: String -> String
addNumber = unlines . (\e -> zipWith (numberWithIndent (getIndent e) (nrWidth $ length e)) [1..]) . lines
[/haskell]

整成这种?难读不少阿,还有就是函数写成这种形式,如果不显式注明签名式的话,而参数又是多态的话,可能会遇到Monomorphism Restriction方面的错误,不知道的话,很难debug。point free除非是那种很短的语句,否则没太大意思的。


不是,匿名函数里还有参数呢。

我只是想看看它怎么变成 point free 的,没准备实用的。


_________________
我的博客 https://blog.lilydjwg.me/
提问的智慧
Arch Linux 中文论坛

我的vimrc: https://git.io/vimrc


页首
 用户资料  
 
5 楼 
 文章标题 : Re: 这段 Haskell 如何弄成 point-free 的?
帖子发表于 : 2012-03-23 8:45 
头像

注册: 2009-07-25 1:57
帖子: 701
送出感谢: 5
接收感谢: 13
你这个要完全去掉太难了,我推了一会儿放弃了。有两个地方有依赖,还都是在一个函数内部的。

我觉得要curry化的话,最好是那种没依赖的。


_________________
https://github.com/tangboyun
http://tangboyun.is-programmer.com/
提问的智慧————Eric Steven Raymond
回答的智慧————Andrew Clarke
吾尝终日而思矣,不如须臾之所学也;吾尝跂而望矣,不如登高之博见也。
急急急标题什么的,最讨厌了!
急急复急急,急急何其多,我生待急急,万事急急急。


页首
 用户资料  
 
6 楼 
 文章标题 : Re: 这段 Haskell 如何弄成 point-free 的?
帖子发表于 : 2012-04-14 23:00 
头像

注册: 2009-04-11 23:46
帖子: 4130
系统: Arch Linux
送出感谢: 11
接收感谢: 124
知道了:
引用:
22:59 <lilydjwg> @pl \s -> let ls = lines s in unlines $ zipWith (numberWithIndent (getIndent ls) (nrWidth $ length ls)) [1..] ls
22:59 <lambdabot> unlines . (flip zipWith [1..] =<< liftM2 numberWithIndent getIndent (nrWidth . length)) . fix . const . lines


_________________
我的博客 https://blog.lilydjwg.me/
提问的智慧
Arch Linux 中文论坛

我的vimrc: https://git.io/vimrc


页首
 用户资料  
 
7 楼 
 文章标题 : Re: 这段 Haskell 如何弄成 point-free 的?
帖子发表于 : 2012-04-16 8:49 
头像

注册: 2009-07-25 1:57
帖子: 701
送出感谢: 5
接收感谢: 13
这个自动推导牛的。。。要读懂就要在纸上来回推几回了


_________________
https://github.com/tangboyun
http://tangboyun.is-programmer.com/
提问的智慧————Eric Steven Raymond
回答的智慧————Andrew Clarke
吾尝终日而思矣,不如须臾之所学也;吾尝跂而望矣,不如登高之博见也。
急急急标题什么的,最讨厌了!
急急复急急,急急何其多,我生待急急,万事急急急。


页首
 用户资料  
 
显示帖子 :  排序  
发表新帖 回复这个主题  [ 7 篇帖子 ] 

当前时区为 UTC + 8 小时


在线用户

正在浏览此版面的用户:没有注册用户 和 1 位游客


不能 在这个版面发表主题
不能 在这个版面回复主题
不能 在这个版面编辑帖子
不能 在这个版面删除帖子
不能 在这个版面提交附件

前往 :  
本站点为公益性站点,用于推广开源自由软件,由 DiaHosting VPSBudgetVM VPS 提供服务。
我们认为:软件应可免费取得,软件工具在各种语言环境下皆可使用,且不会有任何功能上的差异;
人们应有定制和修改软件的自由,且方式不受限制,只要他们自认为合适。

Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group
简体中文语系由 王笑宇 翻译