Escreva um combinador de pontos fixos no menor número de caracteres possível, no idioma de sua escolha.
- forma livre ( ou seja , o que for mais curto): programa inteiro, função real, trecho de código
- você não pode usar a biblioteca padrão, se houver uma
- no entanto, você pode extraí-lo de outras funções de alto nível que preferiria fazer do que construí-lo a partir das bases
Inclua um fatorial recursivo ou Fibonacci que o utilize como demonstração.
Nesta questão, a auto-referência é aceitável, o objetivo é apenas removê-lo da função recursiva à qual ele se aplicará.
(define Y(lambda(f)(f(Y f))))
?)Respostas:
Haskell: 10 caracteres
Exemplo de uso para criar definições recursivas de fatorial ou enésimo-Fibonacci:
Porém, uma maneira mais comum de usar
y
seria gerar essas seqüências diretamente, e não como funções:Claro, com Haskell, isso é um pouco como pescar em um barril! A
Data.Function
biblioteca possui essa função, chamadafix
, embora implementada de maneira um pouco mais detalhada.fonte
Perl, 37
Demonstração fatorial:
Demonstração de Fibonacci:
fonte
GNU C - 89 caracteres
Exemplo:
fonte
k2, 12 caracteres
A implementação auto-referencial óbvia é a mais curta. Este é um sinal de bom design de linguagem. Infelizmente, K não é preguiçoso; portanto, podemos gerenciar apenas a chamada por valor.
Essa definição também deve funcionar em k4 e q sem problemas, embora eu assuma k2 nos exemplos abaixo.
Uns 18 caracteres mais modestos nos permitem transcrever exatamente
(λx. x x) (λxyz. y (x x y) z)
para K.Talvez um dia (k7?), Isso possa parecer
Y:{x Y x}
.fonte
Python 3, 30 bytes
Demo:
Créditos: https://gist.github.com/WoLpH/17552c9508753044e44f
fonte