package code.stuff;

import code.term.*;
import code.table.*;

public class Util {
    private static int nilID = ModuleTable.getId("Prelude", "[]");
    private static int consID = ModuleTable.getId("Prelude", ":");
    private static Term nilTerm = new Term(nilID, new Term[]{});

    // argument must be fully evaluated!
    public static String convertTermToString(Term term) {
        StringBuffer stringBuf = new StringBuffer();

        while (term.getRoot() != nilID) {
            Term[] arguments = term.getArgument();
            Term head = arguments[0];
            char charValue = ((TermImplChar) head.getRepresentation()).value;
            stringBuf.append(charValue);
            term = arguments[1];
        }

        return stringBuf.toString();
    }

    public static Term convertStringToTerm(String s) {
        int length = s.length();
        Term reduct = nilTerm;
        for (int i = length - 1; i >= 0; i--) {
            reduct = new Term(consID, 
			      new Term[]{ new Term(s.charAt(i)), reduct });
        }
        return reduct;
    }
}
