00001 package plp.functional2.expression;
00002
00003 import static plp.expressions1.util.ToStringProvider.listToString;
00004
00005 import java.util.Collections;
00006 import java.util.HashSet;
00007 import java.util.List;
00008 import java.util.Set;
00009
00010 import plp.expressions2.expression.Expressao;
00011 import plp.expressions2.expression.Id;
00012 import plp.expressions2.expression.Valor;
00013 import plp.expressions2.memory.AmbienteExecucao;
00014 import plp.functional1.util.DefFuncao;
00015 import plp.functional2.util.PartialInstantiatorVisitor;
00016
00020 public class ValorFuncao extends DefFuncao implements ValorAbstrato {
00021
00022 public ValorFuncao(List<Id> argsId, Expressao exp) {
00023 super(argsId, exp);
00024 }
00025
00026 public Valor avaliar(AmbienteExecucao ambiente) {
00027
00028 Set<Id> variaveisLocais = Collections.unmodifiableSet(new HashSet<Id>(
00029 this.getListaId()));
00030
00031 return (Valor) PartialInstantiatorVisitor.getInstance().visit(this,
00032 ambiente, variaveisLocais);
00033
00034 }
00035
00036 @Override
00037 public String toString() {
00038 return String.format("fn %s . %s", listToString(getListaId(), " "),
00039 getExp());
00040 }
00041
00042 }