Hacker Gaucho

Linguagens De ProgramaçãoMatrixMetas

Cuidado ao pedir coisas a um programador

Hoje no trabalho, um colega enviou a seguinte piada para uma lista interna:

A esposa pede ao marido, um programador, para ir a mercearia e diz:

– Compre duas salsichas e, se eles tiverem ovos, compre 10.

O programador vai até a loja e pergunta:

– Vocês têm ovos?

– Sim.

– Então eu quero 10 salsichas.

Esta piada é simplesmente muito boa (de fato, eu pensei exatamente como o programador da piada) e o Otávio encaminhou a mensagem para pipoca-l, nossa lista de discussão do pessoal da Unisinos. A primeira resposta foi do Dante, com a seguinte objeção:

Mas cara, o programador não deveria primeiro comprar as duas salsichas pra depois comprar mais 10?

O que nos mostrou que estávamos diante um grande problema semântico, e não de uma inocente piada. Dada a criticidade da necessidade de uma solução para o problema, o Otávio e eu prontamente começamos a trabalhar na solução. A conclusão a qual chegamos, com base em nossos trabalhos que seguiram escolas diferentes de pensamento para o Problema dos Ovos e das Salsichas do Programador, é de que o problema é altamente ambíguo e não possui solução computacional definitiva.

A seguir encontra-se a resposta que produzimos, anunciando tal fato:

O problema é ambíguo e sugere duas abordagens. (Cordeiro, O. C., 2008) sugere que o valor que representa a quantidade de salsichas a serem adquiridas é sobrescrito a cada pedido de compra, sugerindo uma mudança de ideia por parte do agente que executa a ação. Sendo assim, o problema pode ser resolvido utilizando o seguinte programa:

#!/bin/bash

SAUSAGES=0

function buy_sausages {
SAUSAGES=$1
}

buy_sausages 2 && if [[ $EGGS != 0 ]]; then buy_sausages 10; fi

echo $SAUSAGES

No entanto, a abordagem dada por (Silveira, C. L. B., 2008) acrescenta ao valor mencionado a quantidade requisitada pelo agente em cada ação de compra. O programa abaixo ilustra a semântica da abordagem:

#!/bin/bash

SAUSAGES=0

function buy_sausages {
SAUSAGES=$((SAUSAGES+$1))
}

buy_sausages 2 && if [[ $EGGS != 0 ]]; then buy_sausages 10; fi

echo $SAUSAGES

Os resultados da execução dos programas são apresentados a seguir, demonstrando a ambigüidade do problema em questão:

[email protected]:~# EGGS=0 ./cesar.sh
2
[email protected]:~# EGGS=1 ./cesar.sh
12
[email protected]:~# EGGS=0 ./otavio.sh
2
[email protected]:~# EGGS=1 ./otavio.sh
10

Dado que o resultado é determinístico, não são necessárias múltiplas execuções para os cálculos de média e desvio padrão dos valores observados.

Referências

Fonte

Gostou do artigo? Compartilhe

NoFacebook NoLinkedin NoTwitter NoWhatsapp

Siga-me nas redes sociais

NoFacebook NoGithub NoLast.fm NoLinkedin NoTwitter