mirror of
https://github.com/aNNiMON/Own-Programming-Language-Tutorial.git
synced 2024-09-20 08:44:20 +03:00
Добавлены функции в модуль math
This commit is contained in:
parent
0883845872
commit
62b1707de9
@ -1,9 +1,9 @@
|
|||||||
package com.annimon.ownlang.lib.modules;
|
package com.annimon.ownlang.lib.modules;
|
||||||
|
|
||||||
import com.annimon.ownlang.lib.Function;
|
import com.annimon.ownlang.lib.*;
|
||||||
import com.annimon.ownlang.lib.Functions;
|
import java.util.function.DoubleBinaryOperator;
|
||||||
import com.annimon.ownlang.lib.NumberValue;
|
import java.util.function.DoubleFunction;
|
||||||
import com.annimon.ownlang.lib.Value;
|
import java.util.function.DoubleUnaryOperator;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
*
|
*
|
||||||
@ -11,16 +11,35 @@ import com.annimon.ownlang.lib.Value;
|
|||||||
*/
|
*/
|
||||||
public final class math implements Module {
|
public final class math implements Module {
|
||||||
|
|
||||||
|
private static final DoubleFunction<NumberValue> doubleToNumber = v -> new NumberValue(v);
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void init() {
|
public void init() {
|
||||||
Functions.set("sin", args -> {
|
Functions.set("abs", functionConvert(Math::abs));
|
||||||
if (args.length != 1) throw new RuntimeException("One arg expected");
|
Functions.set("cos", functionConvert(Math::cos));
|
||||||
return new NumberValue(Math.sin(args[0].asNumber()));
|
Functions.set("sin", functionConvert(Math::sin));
|
||||||
});
|
Functions.set("sqrt", functionConvert(Math::sqrt));
|
||||||
Functions.set("cos", args -> {
|
Functions.set("toDegrees", functionConvert(Math::toDegrees));
|
||||||
if (args.length != 1) throw new RuntimeException("One arg expected");
|
Functions.set("toRadians", functionConvert(Math::toRadians));
|
||||||
return new NumberValue(Math.cos(args[0].asNumber()));
|
|
||||||
});
|
Functions.set("pow", biFunctionConvert(Math::pow));
|
||||||
|
Functions.set("atan2", biFunctionConvert(Math::atan2));
|
||||||
|
|
||||||
|
Variables.set("PI", new NumberValue(Math.PI));
|
||||||
|
Variables.set("E", new NumberValue(Math.E));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private static Function functionConvert(DoubleUnaryOperator op) {
|
||||||
|
return args -> {
|
||||||
|
if (args.length != 1) throw new RuntimeException("One arg expected");
|
||||||
|
return doubleToNumber.apply(op.applyAsDouble(args[0].asNumber()));
|
||||||
|
};
|
||||||
|
}
|
||||||
|
|
||||||
|
private static Function biFunctionConvert(DoubleBinaryOperator op) {
|
||||||
|
return args -> {
|
||||||
|
if (args.length != 2) throw new RuntimeException("Two args expected");
|
||||||
|
return doubleToNumber.apply(op.applyAsDouble(args[0].asNumber(), args[1].asNumber()));
|
||||||
|
};
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user