mirror of
https://github.com/aNNiMON/Own-Programming-Language-Tutorial.git
synced 2024-09-20 00:34:20 +03:00
Добавлены функции в модуль math
This commit is contained in:
parent
0883845872
commit
62b1707de9
@ -1,26 +1,45 @@
|
||||
package com.annimon.ownlang.lib.modules;
|
||||
|
||||
import com.annimon.ownlang.lib.Function;
|
||||
import com.annimon.ownlang.lib.Functions;
|
||||
import com.annimon.ownlang.lib.NumberValue;
|
||||
import com.annimon.ownlang.lib.Value;
|
||||
import com.annimon.ownlang.lib.*;
|
||||
import java.util.function.DoubleBinaryOperator;
|
||||
import java.util.function.DoubleFunction;
|
||||
import java.util.function.DoubleUnaryOperator;
|
||||
|
||||
/**
|
||||
*
|
||||
* @author aNNiMON
|
||||
*/
|
||||
public final class math implements Module {
|
||||
|
||||
private static final DoubleFunction<NumberValue> doubleToNumber = v -> new NumberValue(v);
|
||||
|
||||
@Override
|
||||
public void init() {
|
||||
Functions.set("sin", args -> {
|
||||
if (args.length != 1) throw new RuntimeException("One arg expected");
|
||||
return new NumberValue(Math.sin(args[0].asNumber()));
|
||||
});
|
||||
Functions.set("cos", args -> {
|
||||
if (args.length != 1) throw new RuntimeException("One arg expected");
|
||||
return new NumberValue(Math.cos(args[0].asNumber()));
|
||||
});
|
||||
Functions.set("abs", functionConvert(Math::abs));
|
||||
Functions.set("cos", functionConvert(Math::cos));
|
||||
Functions.set("sin", functionConvert(Math::sin));
|
||||
Functions.set("sqrt", functionConvert(Math::sqrt));
|
||||
Functions.set("toDegrees", functionConvert(Math::toDegrees));
|
||||
Functions.set("toRadians", functionConvert(Math::toRadians));
|
||||
|
||||
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