unlambda - Unlambda

unlambda
Paradigma Quase puro funcional
Projetado por David Madore
Desenvolvedor David Madore
Apareceu pela primeira vez 28 de junho de 1999 ; Há 19 anos ( 1999-06-28 )
Versão estável
2.0.0 / 20 de dezembro de 1999 ; 18 anos atrás ( 1999/12/20 )
disciplina Typing Untyped
linguagem de implementação Esquema , C , Java
Licença GPL 2.0 ou posterior
Local na rede Internet www .madore .org / ~ david / programas / unlambda

Unlambda é um mínimo "quase pura " linguagem de programação funcional inventado por David Madore. É baseado em lógica combinatória , uma versão do cálculo lambda que omite o operador lambda. Ele baseia-se principalmente em duas funções internas ( se k) e um operador aplicar (escrito `, a crase personagem). Estes só tornam Turing completo , mas há também alguns saída de entrada / (I / O) para funções permitem interagir com o utilizador, algumas funções de atalho, e uma avaliação lenta função. Variáveis não são suportados.

Unlambda é software livre e de código aberto distribuído sob a GNU General Public License (GPL) 2.0 ou posterior.

Princípios básicos

Como uma linguagem de programação esotérica , unlambda se entende como uma demonstração de programação funcional muito pura, em vez de para o uso prático. Sua principal característica é a falta de operadores convencionais e tipos-o de dados único tipo de dados no programa são funções de um parâmetro. Os dados podem, contudo, ser simulado com funções adequadas como no cálculo lambda . Funções multi-parâmetro pode ser representado através do método de currying .

Unlambda baseia-se no princípio da eliminação de abstração , ou a eliminação de todas as variáveis salvas, incluindo funções. Como uma linguagem puramente funcional, funções de unlambda são objetos de primeira classe , e são os únicos tais objetos.

Aqui é uma implementação de um programa Olá mundo em unlambda:

`r```````````.H.e.l.l.o. .w.o.r.l.di

Originais funções embutidas

A notação denota uma função que leva um argumento e retorna-lo inalterado, imprimir o caráter único x como um efeito colateral quando é invocada. representa a versão da função de identidade que não tem tal efeito lateral; ele é usado aqui como um argumento fictício. O programa se aplica a função -Printing a um argumento fictício de , retornando e imprimir a carta como um efeito colateral. Da mesma forma, primeiro aplica-se a , imprimir a letra e retornando ; este resultado é, em seguida, aplicado a tal como no exemplo anterior. A função é açúcar sintático para a função que imprime um caractere de nova linha. .xi`.didiid``.l.di.l.dl.d.dir

Outras características importantes fornecidos por unlambda incluir o ke sfunções. kfabrica funções constantes: o resultado de uma função que, quando invocado, retorna x . Assim, o valor de é x para qualquer x e y . `kx``kxy

sé um operador de avaliação generalizada. avaliada como para qualquer x , y , e z . É um facto notável que e são suficientes para realizar qualquer cálculo, tal como descrito no cálculo ESQUI combinador . Como um breve exemplo, a função de identidade pode ser implementado como , uma vez que produz x para todos os x . ```sxyz``xz`yzski``skk```skkx

Construção de controle de um fluxo de unlambda é chamar a continuação atual , denotado c. Quando uma expressão da forma é avaliada, um especial continuação objecto é construído, que representa o estado do interpretador nesse momento. Então x é avaliada, e então o resultado é dado o objeto continuação como um argumento. Se a continuação nunca é aplicado a um argumento, o valor da expressão é o mesmo que o valor de x . Mas se o objeto de continuação é aplicada a um valor y , a execução de x é imediatamente interrompida, e o valor de toda a expressão é y . `cx`cx`cx

Semântica de execução de unlambda são normalmente avaliação ansiosa , mas uma avaliação preguiçosa existe opção, indicada pelo uso do doperador. Geralmente, para avaliar a expressão da forma , unlambda avalia primeiro x , em seguida, Y , e, em seguida, aplica- x para y . No entanto, se x é avaliada como o valor especial , então y é não avaliadas; em vez disso, o valor da expressão é um especial "computação retardada" objeto, que, quando aplicado a um argumento z , avalia y , e, em seguida, aplica-se o seu valor para z . Na ausência de efeitos colaterais, este é exatamente o mesmo que . A diferença é que executa quaisquer efeitos secundários em y imediatamente, ao passo que adia os efeitos laterais até que o resultado é aplicado a um outro argumento. `xyd`dy`iy`iy`dy

Próximo operador integrado do unlambda é v, que ignora o seu argumento e retorna v. Este recurso não é estritamente necessário, uma vez que vpoderia ser implementado como ``s`k``s``s`kskk`k``s``s`kskk, mas é fornecido como uma conveniência. (Esta expressão acima é simplesmente `Yk, que Yindica um elemento de combinação ponto fixo ).

Versão 2 built-in funções

Mais built-ins foram introduzidas na versão unlambda 2. entrada é facilitada pelos operadores @e . Quando é aplicado a uma função de x , um personagem é lida a partir da entrada, e armazenado como o "caráter atual"; então X é aplicado a . No entanto, se há mais personagens estavam disponíveis na entrada, o caractere atual é deixado indefinido, e x é aplicado em seu lugar. Quando uma função é aplicada a uma função de x , o resultado é a avaliação de se o personagem atual é u , caso contrário, é avaliada. ?u@iv?u`xi`xv

Há também um operador de "reedição" |. Quando é avaliada, a função x é aplicada a se u é o personagem atual, ou se não houver caracteres atual. `|x.uv

Finalmente, há um operador de saída e. Quando eé aplicado a x , a execução do programa é encerrado, e x é tomado como o resultado do programa (a maioria dos intérpretes actualmente existentes ignorar o resultado de qualquer maneira).

Veja também

Referências

links externos