Joy (programming language)

This is an old revision of this page, as edited by 200.248.8.130 (talk) at 15:20, 6 December 2007 (Joy - Tradução). The present address (URL) is a permanent link to this revision, which may differ significantly from the current revision.

A linguagem de programação JOY é uma linguagem de programação puramente funcional que foi produzida por Manfred von Thun na Universidade de La Trobe em Melbourne, Australia.

JOY é baseada na composição de funções, melhor que calculos Lambda. Mostrou ter muita semelhanças a Forth, Foi projetada como um tipo de evolução paralela e convergente.

JOY é incomun (com exceção para linguagens de programação a nivel de função e algumas esotericas, como a UNLAMBDA) em que falta um operador LAMBDA e portanto a falta de parametros formais. Para ilustrar isto com um exemplo comum, isto é, como a função quadrada pode ser definida em uma linguagem de programação imperativa (C):


int square(int x) {

 return x*x;

}


A variavel X é um parametro formal que é substituido pelo valor real a ser multiplicado quando a função é chamada. Agora aki como a função seria definida em uma linguagem funcional (esquema)


(define square

 (lambda (x)
   (* x x)))


Há diferentes formas, mas ainda usando o parametro formal X dessa maneira. Agora aqui é como a função quadrada seria definida em JOY


DEFINE square == dup * .


Explicando: em JOY tudo é uma função que leva uma pilha como argumento e retorna uma pilha como resultado. Por exemplo, o numero 5, não é, como pode parecer, um inteiro constante, mas ao invés um programa curto que empurra o número 5 sobre a pilha. O operador (*) joga dois numeros pra fora da pilha e coloca de volta o produto deles. O operador DUP, duplica o elemento q esta no topo da pilha, simplismente tirando da pilha uma copia do mesmo Assim esa definição da função quadrada diz fazer uma cópia do elemento do topo da pilha e então multiplicar os dois elementos do topo, deixando o quadrado do elemento original no toipo da pilha . Isto é, não necessitando de parametro formal. Esta designação da a JOY conscisão e poder, como ilustrado por essa definição de QUICKSORT


DEFINE qsort ==
  [small]
  []
  [uncons [>] split]
  [[swap] dip cons concat]
  binrec .


"binrec" é uma das varias combinações recursivas de JOY, implementando recursão binária. Espera quatro programas no topo da pilha que representam a condição de terminação (se a lista é "pequena" (1 ou 0 elementos) já é ordenada), o que fazer se a condição de terminação é conhecida (neste caso nada), o que fazer por padrão (dividir a lista em dois, compararando cada elemento como o "pivô") e finalmente o que fazer no final (inserir o "pivô" entre os dois )