如何在Rust中寫Y組合子?

時間 2021-05-31 03:09:59

1樓:Nugine

這裡給出兩種實現。

符合理論要求的:fny

(f: implFn(

&dynFn(

A)-> O,A

)-> O

)-> implFn(

A)-> O

}impl

<'a,

A,O>

Copy

forX

<'a,

A,O>

{}impl

<'a,

A,O>

X<'a,

A,O>

}move|a

|(|x: X

,a

|x.call(x

,a))(X(&|

x,a|

f(&|a

|x.call(x

,a),a

)),a)}

犯規的:fny

<'a,

A,O>

(f: implFn(

&dynFn(

A)-> O,A

)-> O+'a

)-> implFn(

A)-> O+'a

move|a

|real_y(&

f)(a)

}詳細解釋請看專欄

Nugine:Rust 有趣片段(三):Y 組合子

2樓:HOOCCOOH

type 相當於 alias,是不能迴圈套型別的。

首先你需要給這個引數是自己的函式型別包一層 struct,通過 Box 或引用來指定函式以避免閉包引用自身型別(這是不允許的)。

乙個簡單的例子是這樣(這個 call() 是目前 Fn-family trait 還沒穩定的代替方案...)

pubstruct

Rec<'a,

T,U>(&

'adynFn(

Rec

U>,T

)-> U

);impl

<'a,

T: 'a

,U: 'a

>Rec<'a,

T,U>}pubfny

(f: implFn(

Rec

U>,T

)-> U

)-> implFn(

T)-> U

fnmain

()else

});fornin

0..=10

: {}",n

,fact(n

));}

}Rust Playground

這個實現方案中的 &dyn 動態分發好像會被優化掉,但尾遞迴優化不了。

HOOCCOOH:(半個)0-cost Y Combinator in Rust

如何評價南韓組合leessang中Gary的說唱水平

Star璀璨 我覺得本身layback的唱法就挺不易,而且狗哥卡的都很準,風格很獨特,聲音也很具有辨識度,歌詞也寫的很real很打動人 睡不醒的冬三月 可能回答有點走偏,但還是想表達一下聽他們的歌時的感受 單曲迴圈了一首歌很久之後,換下一首歌聽時,會發現我天這首歌更好聽啊!每次換歌都有這種感受 峰徐...

如何評價UNINE組合中的管櫟?

偏路人,看過青 真是搞不懂他為什麼不火?搖裡唯一乙個靠前出道還沒有塌房的人,說到搖,他明明在青排名很高位,結果出道第四?最低也得第三吧?他本人素質也挺好的,粉絲素質也可以,搖團的某幾位粉絲成天引戰,拉踩這個拉踩那個,好感都沒。他算是搖團黑料最少的乙個吧?他挺溫柔的,在青會幫助D班的訓練生,在jy受傷...

如何在Football Manager中制定正確的戰術?

poorgod 建議讀英文版的 guide to fm 搞清楚每一項戰術指令 個人戰術指令 定位球指令 心態 自由度的含義。了解自己的球隊。知道每個球員的特點 踢球習慣。根據其特點和位置熟悉度 球隊板凳深度制定戰術。根據對手特點制定臨場戰術,根據形勢變化進行林場調整。我一直不太相信網上的各種包打天下...