cálculo lambda para programação funcional
-
12-09-2019 - |
Pergunta
no cálculo lambda (? x. Y ?. ? s. Z ?. X s (y s z)) é usado para adição de dois algarismos da Igreja Como podemos explicar isso, não há qualquer bom recurso do cálculo lambda para programação funcional? sua ajuda é muito apreciada
Solução
f1 Na verdade ?. f2 ?. ? s. z ?. (F1 s (f2 s z)) calcula disso, porque é de facto substituindo (f2 s z), o número representado por F2, para o interior de "zero" (f1 s z).
Exemplo: Vamos levar dois para F2, s s z
em forma expandida. f1 é uma só: s z
. Substituir esse último z
por F2 e você começa s s s z
, a forma expandida para três.
Este seria mais fácil com uma lousa e-Mão de ondulação, desculpe.
Outras dicas
Em cálculo lambda, você codificar um tipo de dados em termos das operações que induz. Por exemplo, um boolean é uma apenas uma função de escolha que leva em entrada de dois valores A e B e tanto retornos uma ou B:
true = \a,b.a false = \a,b.b
O que é o uso de um número natural? Sua principal finalidade computacional é fornecer um ligado a iteração. Então, nós codificar um número natural como um operador que leva em introduzir uma função f, um valor x, e repita a aplicação de f mais de x para n vezes:
n = \f,x.f(f(....(f x)...))
com n ocorrências de f.
Agora, se você deseja iterate n + m vezes a função f a partir de x você deve começar a iteração n vezes, que é (n f x) e, em seguida, iterate para m outras vezes, a partir do resultado anterior, ou seja
m f (n f x)
Se você quiser m vezes * iterate n você precisa iterate m vezes a operação de iteração n vezes f (como em dois loops aninhados), que é
m (n f) x
A codificação anterior de tipos de dados é mais formalmente explicados em termos de construtores e eliminadores correspondentes (a assim chamada Bohm-Berarducci codificação).