Joy (programming language): Difference between revisions

Content deleted Content added
use multiplication, to connect with the previous examples
Joy - Tradução
Line 1:
A linguagem de programação JOY é uma linguagem de programação
{{Infobox programming language
puramente funcional que foi produzida por Manfred von Thun
|name = Joy
na Universidade de La Trobe em Melbourne, Australia.
|logo =
|paradigm = [[multi-paradigm programming language|multi-paradigm]]: [[functional programming|functional]], [[Stack-oriented programming language|stack-oriented]]
|year = 2001
|designer = [[Manfred von Thun]]
|developer = Manfred von Thun, John Cowan
|latest release version = [[March 17]], [[2003]]
|latest release date = [[March 17]], [[2003]]
|typing = [[strong typing|strong]], [[dynamic typing|dynamic]]
|implementations = Joy0, Joy1, "Current Joy", "John Cowan's Joy"
|dialects =
|influenced_by = [[Forth (programming language)|Forth]], [[Scheme (programming language)|Scheme]], [[C (programming language)|C]]
|influenced = [[Factor (programming language)|Factor]], [[Cat (programming language)|Cat]], [[V (programming language)|V]]
}}
 
JOY é baseada na composição de funções, melhor que calculos Lambda.
The '''Joy programming language''' is a purely [[functional programming language]] that was produced by Manfred von Thun of [[La Trobe University]] in [[Melbourne]], [[Australia]]. Joy is based on composition of functions rather than [[lambda calculus]]. It has turned out to have many similarities to [[Forth (programming language)|Forth]], due less to design than to a sort of parallel evolution and convergence.
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
Joy is unusual (except for [[function-level programming]] languages and some esoteric ones, such as [[unlambda]]) in its lack of a [[lambda calculus|lambda]] operator, and therefore lack of [[Parameter (computer science)|formal parameters]]. To illustrate this with a common example, here is how the square function might be defined in an [[imperative programming language]] ([[C (programming language)|C]]):
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;
}
 
The variable x is a formal parameter which is replaced by the actual value to be squared when the function is called. Now here's how the same function would be defined in a [[functional programming|functional]] language ([[Scheme (programming language)|scheme]]):
 
(defineint square(int x) {
return x*x;
(lambda (x)
}
(* x x)))
 
This is different in many ways, but it still uses the formal parameter x in the same way. Now here is how the square function would be defined in Joy:
 
DEFINE square == dup * .
 
A variavel X é um parametro formal que é substituido pelo valor
To explain: In Joy, everything is a function that takes a [[stack (data structure)|stack]] as an argument and returns a stack as a result. For instance, the number 5 is not, as it might appear to be, an integer constant, but instead a short program that pushes the number 5 onto the stack. The '''*''' operator pops two numbers off the stack and pushes their product. The '''dup''' operator simply duplicates the top element of the stack by pushing a copy of it. So this definition of the square function says to make a copy of the top element and then multiply the two top elements, leaving the square of the original top element on top of the stack. There is no need for a formal parameter at all. This design gives Joy conciseness and power, as illustrated by this definition of [[quicksort]]:
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
 
 
 
<pre>
<nowiki>
DEFINE qsort ==
[small]
Line 43 ⟶ 63:
[[swap] dip cons concat]
binrec .
</nowiki>
</pre>
 
"binrec" is one of Joy's many [[recursion|recursive]] [[combinator]]s, implementing binary recursion. It expects four quoted programs on top of the stack which represent the termination condition (if a list is "small" (1 or 0 elements) it is already sorted), what to do if the termination condition is met (in this case nothing), what to do by default (split the list into two halves by comparing each element with the pivot), and finally what to do at the end (insert the pivot between the two sorted halves).
 
== Mathematical purity ==
 
One of the most appealing aspects of Joy is this: the meaning function is a [[homomorphism]] from the [[syntax|syntactic]] [[monoid]] onto the [[semantics|semantic]] [[monoid]]. That is, the syntactic relation of [[concatenation]] of [[symbol]]s maps directly onto the semantic relation of [[Function composition|composition]] of [[function (mathematics)|functions]]. It is a [[homomorphism]] instead of an [[isomorphism]] because it is [[onto]] but not [[one-to-one]], that is, some sequences of symbols have the same meaning (e.g. "dup +" and "2 *") but no symbol has more than one meaning.
 
Joy manages to be practical and potentially useful, unlike the otherwise similar [[Unlambda]]. Its library routines mirror those of ISO [[C (programming language)|C]], though the current implementation is not easily extensible with functions written in C.
 
==External links==
*[http://www.latrobe.edu.au/philosophy/phimvt/joy.html Joy homepage]
 
[[Category:Programming languages]]
[[Category:Concatenative programming languages]]
[[Category:Stack-oriented programming languages]]
[[Category:Functional languages]]
 
"binrec" é uma das varias combinações recursivas de JOY, implementando
[[de:Joy (Programmiersprache)]]
recursão binária. Espera quatro programas no topo da pilha que
[[es:Lenguaje de programación Joy]]
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
)