第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

怎樣用理解使用 Transducer?

怎樣用理解使用 Transducer?

元芳怎么了 2019-04-10 20:48:07
之前看過Clojure作者的演講:http://www.tudou.com/programs/view/5y_hDVID7gQ/http://www.tudou.com/programs/view/PqdnO8uU6UU/現(xiàn)在又看了一個JavaScript的教程:http://phuu.net/2014/08/31/csp-and-transducers.html大意Transducer是從reduce抽象出來的跟數(shù)據(jù)結構無關的序列操作的新辦法(?),而且還能作為函數(shù)任意復合(?),不知道是不是這個意思...有沒有同學熟悉這方面,而且能用生動的例子講解一下原理,特別還有怎么用的?
查看完整描述

2 回答

?
30秒到達戰(zhàn)場

TA貢獻1828條經(jīng)驗 獲得超6個贊

說多了都是痛,一個例子就夠了
首先是簡單的概念
reduce接收一個reducing函數(shù)和一個collection返回值,比如+是reducing函數(shù)
transducer接收一個reducing函數(shù),返回一個新的reducing函數(shù),(mapinc)返回transducer,而不是柯里化
所以這倆組合就變成
clojure(reduce((mapinc)+)[123]);;直接用transducer返回的新reducing函數(shù)reduce
如果沒有transducer是這樣的
clojure(reduce+(mapinc[123]));;先弄出個新數(shù)組,再reduce,多出來一步,慢,而且不lazy
想看稍微長一點的解釋可以看看我這篇文章,雖然寫給jsdev的,應該更好理解才是.
                            
查看完整回答
反對 回復 2019-04-10
?
飲歌長嘯

TA貢獻1951條經(jīng)驗 獲得超3個贊

Transducer據(jù)說是在開發(fā)core.async的過程中,RichHickey發(fā)現(xiàn)又在重新實現(xiàn)map,filter,partition等操作,這些操作與clojure/core中的sequence操作極為類似,只不過對象是異步通道而不是序列。因此他重新思考后引入了transducer概念,并重新實現(xiàn)了這些操作(1.7.0-alpha)。因此,transducer是未來的序列操作的基礎。你仍然可以象過去一樣使用序列操作,對我來說現(xiàn)在獲得的額外好處有:
可以用同樣的函數(shù)來處理異步問題和同步問題。
由于transducer是函數(shù)間的組合關系,它不用產(chǎn)生中間的數(shù)據(jù)對象,因此在不需要lazy的場合會有更好的運行效率。
我們過去使用序列時,一般都在寫轉換過程(transform),如(mapinc[012])其中的inc就是轉換過程?,F(xiàn)在我們可以:(defdo-inc(mapinc))來將對每個元素進行inc操作提取出來。還可以:(defdo-inc(comp(filtereven?)(mapinc)))將連續(xù)的轉換過程方便地組合,注意這個操作現(xiàn)在可以用在任何可以被reduce的對象上,包括但不限于序列、異步通道。
更重要的是,map,filter這些操作不過是transducer,它的作用是用transform參數(shù)來生成函數(shù),我們可以寫作自己的transducer,而且可以是有狀態(tài)的transducer,這讓大設計更加容易。
                            
查看完整回答
反對 回復 2019-04-10
  • 2 回答
  • 0 關注
  • 373 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網(wǎng)微信公眾號