使用匿名函式進行函數語言程式設計

匿名函式可用於函式程式設計。要解決的主要問題是沒有本地方法來錨定遞迴,但這仍然可以在一行中實現:

if_ = @(bool, tf) tf{2-bool}();

此函式接受布林值和兩個函式的單元陣列。如果布林值的計算結果為 true,則評估第一個函式;如果布林值的計算結果為 false,則計算第二個函式。我們現在可以輕鬆編寫階乘函式:

fac = @(n,f) if_(n>1, {@()n*f(n-1,f), @()1});

這裡的問題是我們不能直接呼叫遞迴呼叫,因為在評估右側時函式尚未分配給變數。但是,我們可以通過寫作完成這一步驟

factorial_ = @(n)fac(n,fac);

現在,@(n)fac(n,fac) 遞迴地評估階乘函式。使用 y-combinator 進行函數語言程式設計的另一種方法,也可以很容易地實現:

y_ = @(f)@(n)f(n,f);

使用此工具,階乘功能甚至更短:

factorial_ = y_(fac);

或直接:

factorial_ = y_(@(n,f) if_(n>1, {@()n*f(n-1,f), @()1}));