Obecnie uczę się Haskella, a także uczestniczę w raczej teoretycznym wykładzie na temat programowania funkcjonalnego na uniwersytecie.Czysty rachunek Lambda - i funkcja
Wiem, że to jest czysto teoretyczne/akademickie pytanie, ale mimo to jestem zainteresowany, jak wyrażać różne proste funkcje po prostu z czystym rachunkiem lambda (to znaczy bez zdefiniowanych żadnych stałych).
Niektóre materiały wykład kopalni określają wartości logicznych, takich jak:
prawdziwego = \ xy.x
Fałsz = \ xy.y
(\ denotowania symbol lambda)
Jeśli są zdefiniowane tak jak te funkcje selektora, to if-con datkowe można łatwo zdefiniowany jako:
Jeśli = \ x.x
Teraz staram się wymyślić jakiś krótki formularz na logiczne „i” -function. Moje pierwsze przypuszczenie.
i = \ xy {(If x) [(Jeśli y) prawdaFałsz] Fałsz}
Tak zasadniczo ta funkcja lambda otrzyma 2 argumenty uv, gdzie oba muszą być wpisane jak True/False. Jeśli wykonuję różne redukcje beta ze wszystkimi czterema kombinacjami tabeli logicznej, otrzymuję właściwy wynik.
Mimo to ta funkcja wygląda trochę brzydko i myślę o nadaniu jej bardziej eleganckiego charakteru. Wszelkie propozycje tutaj?
Być może powiązane: http://stackoverflow.com/questions/2398503/query-on-booleans-in-lambda-calculus –
@ A.E ++, esp. wyjątkowa odpowiedź http://stackoverflow.com/questions/2398503/query-on-booleans-in-lambda-calculus/2399127#2399127 tutaj. –