2011-11-08 13 views
1

的智力玩具,在方案實施如下:是否可以在C#5.0中使用異步實現陰陽謎題?

(let* ((yin 
    ((lambda (cc) (display #\@) cc) (call-with-current-continuation (lambda (c) c)))) 
    (yang 
    ((lambda (cc) (display #\*) cc) (call-with-current-continuation (lambda (c) c))))) 
(yin yang)) 

拼圖的目標是制定和理解這段代碼的輸出。

我想知道是否有可能使用C#5.0的新異步CPS特性實現具有相同語義的代碼。

我有困難抓的部分是難題依賴let *的語義和call/cc一樣多。我不確定如何在C#中正確表達這種相互作用。

+1

我看不懂計劃,你能給我們另一個難題的實現(在僞?) – Polity

+0

我對這個問題的回答可能會有相當大的幫助。 http://stackoverflow.com/questions/4070237/how-could-the-new-async-feature-in-c-sharp-5-0-be-implemented-with-call-cc –

回答

1

CPS可以完全擺脫call/cc,因此您可以通過手動CPS將它在C#中完全實現。對C#的自動CPS-ing一無所知,我不能說這個功能是否會自動做到這一點。然而,名字中的「異步」讓我停下來。您給出的問題明確涉及此表達式的同步評估。

我的看法:我認爲將其轉換爲C#並不是理解這一點的最快方法。

最後:let *是嵌套綁定的簡寫。所以你可以將其改寫爲:

(let ([yin ...]) 
    (let ([yang ...]) 
    ...)) 

...擺脫let *。就你而言,由於「陽」不依賴於「陰」,其效果就是排序。也就是說,'yin'綁定右側的延續是尚未評估'yang'綁定的延續。

相關問題