Composição de funções em pilha
Lendo e testando o post do Tom Moerte sobre
Composição de funções em Ruby traduzido pelo Akita e refatorado pelo TaQ, a solução de composição de blocos/funções baseai-se em um operador de composição(em Haskell) para geração de uma nova função, simplificando o cálculo e dividindo o problema em partes.
Já em Postscript é implícita tal composição. Por ser uma Linguagem de Programação Orientada a Pilha com a sintaxe Pós-Fixada (Notação Polonesa Invertida) os argumentos e os operadores ficam em um contexto único(pilha), facilitando a execução de cálculos matemáticos sem a necessidade de criar um operador “que junta as funções e passa os parâmetros”. Muito mais simples. Acompanhe.
Primeiramente observe a função
f(x) = X² + 1
Portando para X= 3, temos
f(3) = 3² + 1 f(3) = 10
a mesma função em notação polonesa com operadores postscript
3 2 exp 1 add
quando é executado 3 2 exp o resultado 9 fica na pilha, o valor 1 também está na pilha então 9 1 add resulta em 10. Veja no ghostscript o passo-a-passo(pstack mostra os valores da pilha)
GS>3 GS<1>2 GS<2>pstack 2 3 GS<2>exp GS<1>pstack 9.0 GS<1>1 GS<2>pstack 1 9.0 GS<2>add GS<1>pstack 10.0
Vamos criar as funções
/square { 2 exp} def % eleva ao quadrado o valor corrente
/inc { 1 add } def %adiciona 1 no valor corrente
testando
GS>3 square GS<1>pstack 9.0 GS<1>inc GS<1>pstack 10.0
A composição
Apenas aninhar as funções
/nova{ square inc } def
GS>3 nova
GS<1>pstack
10.0
Programação em pilha tem lá suas vantagens mas não é nada humano.