Ruby语言在编程界可以说是一个后起之秀,出现的目的就是帮助编程人员更简便灵活的去编写代码程序,完成自己的功能需求。比如在Ruby实现stream方面。#t#

按照sicp,首要的是两个函数:delay和force:
delay函数返回延时对象,就是对于未来某个时间求值表达式的承诺;force函数以延时对象为参数,进行相应的求值工作,这里的mem_proc用于记忆已经求值过的表达式。Ruby实现stream的constructor和selector函数:
- def cons_stream(a,b)
 - return a,delay(b)
 - end
 - def stream_car(s)
 - s[0]
 - end
 - def stream_cdr(s)
 - force(s[1])
 - end
 - def stream_null?(s)
 - s.nil? or s==[]
 - end
 
用Ruby中的数组充当“粘合剂”,stream_car直接返回***个元素,而stream_cdr需要用force求值表达式,履行承诺。另外,将空数组[]作为the-empty-stream。再定义几个高阶函数,map和foreach,其他如filter与此类似:
- def stream_enumerate_interval(low,high)
 - if low>high
 - return []
 - else
 - cons_stream(low,stream_enumerate
 
_interval(low.succ,high))- end
 - end
 - def stream_ref(s,n)
 - if n==0
 - stream_car(s)
 - else
 - stream_ref(stream_cdr(s),(n-1))
 - end
 - end
 - def stream_map(proc,s)
 - if stream_null?(s)
 - []
 - else
 - cons_stream(proc.call(stream_car(s))
 
,stream_map(proc,(stream_cdr(s))))- end
 - end
 - def stream_for_each(proc,s)
 - if stream_null?(s)
 - :done
 - else
 - proc.call(stream_car(s))
 - stream_for_each(proc,stream_cdr(s))
 - end
 - end
 - def display_stream(s)
 - stream_for_each(lambda{|item| puts item},s)
 - end
 - def stream_filter(pred,s)
 - if stream_null?(s)
 - []
 - elsif pred.call(stream_car(s))
 - cons_stream(stream_car(s),stream_
 
filter(pred,stream_cdr(s)))- else
 - stream_filter(pred,stream_cdr(s))
 - end
 - end
 
***,看下Ruby实现stream例子:
- puts "s:"
 - s=stream_enumerate_interval(1,5)
 - display_stream(s)
 - puts "odd_s:"
 - odd_s=stream_filter
 
(lambda{|x| x%2==1},s)- display_stream(odd_s)
 - puts "ss:"
 - ss=stream_map(lambda{|x|x*x},s)
 - display_stream(ss)
 
                本文题目:Ruby实现stream具体方法介绍
                
                网址分享:http://www.csdahua.cn/qtweb/news0/321600.html
            
网站建设、网络推广公司-快上网,是专注品牌与效果的网站制作,网络营销seo公司;服务项目有等
声明:本网站发布的内容(图片、视频和文字)以用户投稿、用户转载内容为主,如果涉及侵权请尽快告知,我们将会在第一时间删除。文章观点不代表本网站立场,如需处理请联系客服。电话:028-86922220;邮箱:631063699@qq.com。内容未经允许不得转载,或转载时需注明来源: 快上网