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

Foi útil?

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).

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top