Ir para o conteúdo
  • Revista PROGRAMAR: Já está disponível a edição #59 da revista programar. Faz já o download aqui!

JoaoSkate

Exercício simples de Prolog

Mensagens Recomendadas

JoaoSkate    0
JoaoSkate

quero criar um programa com este predicado/4:

aplica_op(Op,Val1,Val2,R)

em que Op será uma operação matematica: + ou - ou * ou /

Val1 - valor 1 ; Val2 -Valor 2;

R é o resultado de efetuar essa operação.

Já tentei de 2 formas, mas nenhuma está a dar correto:

aplica_op(Op,Val1,Val2,R):- R is Val1 Op Val2.

aplica_op(Op,Val1,Val2,R):- R is Op(Val1, Val2).

Obrigado.

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
HappyHippyHippo    1153
HappyHippyHippo

Vê se isto ajuda: https://en.wikibooks.org/wiki/Prolog/Higher_Order_Programming

Não sei se vai funcionar com operadores, mas pelo menos com predicados "normais" funciona.

pelo que estive a ver/testar, esta solução não é assim tão directa. isto porque como não se consegue executar o código:

call(+, 1, 2, Resultado).

porque não existe o predicado +/3.

logo a solução deverá recair em algo semelhante à segunda solução que apresentas:

Em último caso, podes definir um predicado para cada um dos operadores (em que colocas um + em vez do Op, por exemplo).

o que tornaria o código mais complicado do que necessário


IRC : sim, é algo que ainda existe >> #p@p

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
JoaoSkate    0
JoaoSkate

A única solução que consegui arranjar foi a seguinte:

aplica_op(+,Val1,Val2,R):- R is +(Val1, Val2).
aplica_op(-,Val1,Val2,R):- R is -(Val1, Val2).
aplica_op(*,Val1,Val2,R):- R is *(Val1, Val2).
aplica_op(/,Val1,Val2,R):- R is /(Val1, Val2).

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites

Crie uma conta ou ligue-se para comentar

Só membros podem comentar

Criar nova conta

Registe para ter uma conta na nossa comunidade. É fácil!

Registar nova conta

Entra

Já tem conta? Inicie sessão aqui.

Entrar Agora

×

Aviso Sobre Cookies

Ao usar este site você aceita os nossos Termos de Uso e Política de Privacidade. Este site usa cookies para disponibilizar funcionalidades personalizadas. Para mais informações visite esta página.