Convert Fuse to kotlin
This commit is contained in:
parent
bff9981458
commit
84467388bb
|
@ -1,5 +1,10 @@
|
||||||
<?xml version="1.0" encoding="UTF-8"?>
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
<project version="4">
|
<project version="4">
|
||||||
|
<component name="EntryPointsManager">
|
||||||
|
<list size="1">
|
||||||
|
<item index="0" class="java.lang.String" itemvalue="function.FunctionNames" />
|
||||||
|
</list>
|
||||||
|
</component>
|
||||||
<component name="MavenProjectsManager">
|
<component name="MavenProjectsManager">
|
||||||
<option name="originalFiles">
|
<option name="originalFiles">
|
||||||
<list>
|
<list>
|
||||||
|
|
|
@ -1,35 +0,0 @@
|
||||||
package function.builtin;
|
|
||||||
|
|
||||||
import function.ArgumentValidator;
|
|
||||||
import function.FunctionNames;
|
|
||||||
import function.LispFunction;
|
|
||||||
import sexpression.Atom;
|
|
||||||
import sexpression.Cons;
|
|
||||||
import sexpression.LispString;
|
|
||||||
import sexpression.SExpression;
|
|
||||||
import sexpression.Symbol;
|
|
||||||
|
|
||||||
@FunctionNames({ "FUSE" })
|
|
||||||
public class FUSE extends LispFunction {
|
|
||||||
|
|
||||||
private static final String SEPARATOR = "-";
|
|
||||||
|
|
||||||
private ArgumentValidator argumentValidator;
|
|
||||||
|
|
||||||
public FUSE(String name) {
|
|
||||||
this.argumentValidator = new ArgumentValidator(name);
|
|
||||||
this.argumentValidator.setExactNumberOfArguments(2);
|
|
||||||
this.argumentValidator.setFirstArgumentExpectedType(Symbol.class);
|
|
||||||
this.argumentValidator.setTrailingArgumentExpectedType(Atom.class);
|
|
||||||
this.argumentValidator.setTrailingArgumentExcludedType(LispString.class);
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public SExpression call(Cons argumentList) {
|
|
||||||
argumentValidator.validate(argumentList);
|
|
||||||
Symbol left = (Symbol) argumentList.getFirst();
|
|
||||||
Atom right = (Atom) ((Cons) argumentList.getRest()).getFirst();
|
|
||||||
|
|
||||||
return new Symbol(left.toString() + SEPARATOR + right.toString());
|
|
||||||
}
|
|
||||||
}
|
|
|
@ -0,0 +1,34 @@
|
||||||
|
package function.builtin
|
||||||
|
|
||||||
|
import function.ArgumentValidator
|
||||||
|
import function.FunctionNames
|
||||||
|
import function.LispFunction
|
||||||
|
import sexpression.Atom
|
||||||
|
import sexpression.Cons
|
||||||
|
import sexpression.LispString
|
||||||
|
import sexpression.SExpression
|
||||||
|
import sexpression.Symbol
|
||||||
|
|
||||||
|
@FunctionNames("FUSE")
|
||||||
|
class Fuse(name: String) : LispFunction() {
|
||||||
|
|
||||||
|
private val argumentValidator: ArgumentValidator = ArgumentValidator(name).apply {
|
||||||
|
setExactNumberOfArguments(2)
|
||||||
|
setFirstArgumentExpectedType(Symbol::class.java)
|
||||||
|
setTrailingArgumentExpectedType(Atom::class.java)
|
||||||
|
setTrailingArgumentExcludedType(LispString::class.java)
|
||||||
|
}
|
||||||
|
|
||||||
|
override fun call(argumentList: Cons): SExpression {
|
||||||
|
argumentValidator.validate(argumentList)
|
||||||
|
|
||||||
|
val left = argumentList.first as Symbol
|
||||||
|
val right = (argumentList.rest as Cons).first as Atom
|
||||||
|
|
||||||
|
return Symbol("$left$SEPARATOR$right")
|
||||||
|
}
|
||||||
|
|
||||||
|
companion object {
|
||||||
|
private const val SEPARATOR = "-"
|
||||||
|
}
|
||||||
|
}
|
|
@ -1,4 +1,4 @@
|
||||||
package function.builtin.special;
|
package function.builtin;
|
||||||
|
|
||||||
import function.ArgumentValidator.BadArgumentTypeException;
|
import function.ArgumentValidator.BadArgumentTypeException;
|
||||||
import function.ArgumentValidator.TooFewArgumentsException;
|
import function.ArgumentValidator.TooFewArgumentsException;
|
||||||
|
@ -10,7 +10,7 @@ import testutil.SymbolAndFunctionCleaner;
|
||||||
import static testutil.TestUtilities.assertSExpressionsMatch;
|
import static testutil.TestUtilities.assertSExpressionsMatch;
|
||||||
import static testutil.TestUtilities.evaluateString;
|
import static testutil.TestUtilities.evaluateString;
|
||||||
|
|
||||||
public class FUSETest extends SymbolAndFunctionCleaner {
|
public class FuseTest extends SymbolAndFunctionCleaner {
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
public void fuseSymbolAndNumber() {
|
public void fuseSymbolAndNumber() {
|
Loading…
Reference in New Issue