package tarau.jinni;
import java.util.Enumeration;
import java.util.Vector;

abstract public class Source extends Fluent {

  public Source(Prog p) {
    super(p);
  }
  
  abstract public Term getElement();
  
  Const toList() {
     Term head=getElement();
     if(null==head) return Const.aNil;
     Cons l=new Cons(head,Const.aNil);
     Cons curr=l;
     for(;;) {
       head=getElement();
       if(null==head) break;
       Cons tail=new Cons(head,Const.aNil);
       curr.args[1]=tail;
       curr=tail;
     }
     return l;
   }

   Term toFun() {
      Vector V=new Vector();
      Term X;
      while(null!=(X=getElement())) {
        V.addElement(X);
      }
      return Copier.VectorToFun(V);
   }
}
