2016-10-18 3 views
0

Man kann eine anonyme Funktion mit einem Lambda-Ausdruck definieren:Wie definiere ich eine anonyme rekursive Funktion?

-- Contrived example 
> apply f x = f x 
> apply (\n -> n + 1) 3 
4 

aber ist es möglich, eine anonyme rekursive Funktion zu definieren?

> apply (\n -> n * ??? (n - 1)) 3 -- compute a factorial 
6 

Antwort

3

Import Data.Function verwenden fix Funktion der Festpunkt eines non rekursive Funktion zu berechnen, die die Funktion rekursiv als Argument anzuwenden nimmt

> import Data.Function 
> :t fix 
fix :: (a -> a) -> a 
> apply (fix $ \f n -> if n == 0 then 1 else n * f (n - 1)) 3 
6 
Verwandte Themen