Refactored the built in function quote
This commit is contained in:
parent
38db0862ff
commit
35ef281733
|
@ -1,41 +1,23 @@
|
|||
package function.builtin.special;
|
||||
|
||||
import function.LispFunction;
|
||||
import function.builtin.cons.LENGTH;
|
||||
import function.*;
|
||||
import sexpression.*;
|
||||
|
||||
/**
|
||||
* <code>QUOTE</code> represents the QUOTE form in Lisp.
|
||||
*/
|
||||
public class QUOTE extends LispFunction {
|
||||
|
||||
// The number of arguments that QUOTE takes.
|
||||
private static final int NUM_ARGS = 1;
|
||||
private ArgumentValidator argumentValidator;
|
||||
|
||||
public SExpression call(Cons argList) {
|
||||
// retrieve the number of arguments passed to QUOTE
|
||||
int argListLength = LENGTH.getLength(argList);
|
||||
|
||||
// make sure we have received exactly one argument
|
||||
if (argListLength != NUM_ARGS) {
|
||||
Cons originalSExpr = new Cons(new Symbol("QUOTE"), argList);
|
||||
String errMsg = "too " +
|
||||
((argListLength > NUM_ARGS) ? "many" : "few") +
|
||||
" arguments given to QUOTE: " + originalSExpr;
|
||||
|
||||
throw new RuntimeException(errMsg);
|
||||
}
|
||||
|
||||
return argList.getCar();
|
||||
public QUOTE() {
|
||||
this.argumentValidator = new ArgumentValidator("QUOTE");
|
||||
this.argumentValidator.setExactNumberOfArguments(1);
|
||||
}
|
||||
|
||||
public SExpression call(Cons argumentList) {
|
||||
argumentValidator.validate(argumentList);
|
||||
|
||||
return argumentList.getCar();
|
||||
}
|
||||
|
||||
/**
|
||||
* Determine if the arguments passed to this Lisp function should be
|
||||
* evaluated.
|
||||
*
|
||||
* @return
|
||||
* <code>false</code>
|
||||
*/
|
||||
public boolean evaluateArguments() {
|
||||
return false;
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue