2013-01-18 23 views
3

據我所知,如果你想寫一個遞歸函數而不明確使用遞歸,y combinator是有用的。 C預處理器不支持遞歸。我們能否在C預處理器中實現y combinator以支持遞歸?y combinator和C預處理器

謝謝。

+2

您能否提供一個詳細的示例,以及如何在實際代碼中使用y組合器,假設可以在C預處理器中實現它?你所問的問題只告訴我們你想做什麼,但不知道你爲什麼想把它放在第一位。也許無論你試圖達到什麼目的,都可以在不採取任何措施的情況下實現,只要它的方法正確。 – Mecki

+0

lambda?不是在標準C中,最接近的是http://en.wikipedia.org/wiki/Anonymous_function#C_lambda_expressions –

回答

2

Y combinator是一個高階函數,它需要語言中的高階函數支持來實現顯式遞歸替換。因此,對於特定任務,這可以在Scheme,SML和其他功能語言中完成。

讓我們來談談C預處理器,但是C本身呢?在C中使用高階函數是可能的,因爲我們可以將函數引用作爲函數參數傳遞,並返回它們以模擬高階函數。然而,在語言中缺乏關閉支持不允許實現Y組合器。

由於預處理器對C的限制性更大,因此無法實現基於lambda微積分概念的Y combinator。 Y組合器的應用只能在全功能支持高階函數的函數式編程語言中實現。

C預處理器非常簡單,因爲它只在文本中進行字符串替換。我不會嘗試將lambda演算和函數式編程的任何概念應用到它。