mirror of
https://github.com/Open-Argon/argon-v3.git
synced 2025-12-06 08:56:07 +00:00
add comparisons
This commit is contained in:
@@ -1,8 +1,10 @@
|
||||
package main
|
||||
|
||||
import (
|
||||
"bufio"
|
||||
"fmt"
|
||||
"math/big"
|
||||
"os"
|
||||
)
|
||||
|
||||
type builtinFunc struct {
|
||||
@@ -10,34 +12,6 @@ type builtinFunc struct {
|
||||
FUNC func(...any) (any, ArErr)
|
||||
}
|
||||
|
||||
func ArgonLog(args ...any) (any, ArErr) {
|
||||
output := []any{}
|
||||
for i := 0; i < len(args); i++ {
|
||||
output = append(output, anyToArgon(args[i], false))
|
||||
}
|
||||
fmt.Println(output...)
|
||||
return nil, ArErr{}
|
||||
}
|
||||
|
||||
func ArgonAdd(args ...any) (any, ArErr) {
|
||||
return reduce(func(x any, y any) any {
|
||||
return newNumber().Add(x.(number), y.(number))
|
||||
}, args), ArErr{}
|
||||
}
|
||||
func ArgonDiv(args ...any) (any, ArErr) {
|
||||
if len(args) == 0 {
|
||||
return nil, ArErr{TYPE: "Division Error", message: "Cannot divide nothing", EXISTS: true}
|
||||
}
|
||||
output := args[0].(number)
|
||||
for i := 1; i < len(args); i++ {
|
||||
if args[i].(number).Cmp(newNumber()) == 0 {
|
||||
return nil, ArErr{TYPE: "Division Error", message: "Cannot divide by zero", EXISTS: true}
|
||||
}
|
||||
output = newNumber().Quo(output, args[i].(number))
|
||||
}
|
||||
return output, ArErr{}
|
||||
}
|
||||
|
||||
func ArgonMult(args ...any) (any, ArErr) {
|
||||
return reduce(func(x any, y any) any {
|
||||
return newNumber().Mul(y.(number), x.(number))
|
||||
@@ -45,12 +19,14 @@ func ArgonMult(args ...any) (any, ArErr) {
|
||||
}
|
||||
|
||||
func ArgonInput(args ...any) (any, ArErr) {
|
||||
// allow a message to be passed in as an argument
|
||||
if len(args) > 0 {
|
||||
fmt.Print(anyToArgon(args[0], false))
|
||||
output := []any{}
|
||||
for i := 0; i < len(args); i++ {
|
||||
output = append(output, anyToArgon(args[i], false, true, 3, 0))
|
||||
}
|
||||
var input string
|
||||
fmt.Scanln(&input)
|
||||
fmt.Print(output...)
|
||||
scanner := bufio.NewScanner(os.Stdin)
|
||||
scanner.Scan()
|
||||
input := scanner.Text()
|
||||
return input, ArErr{}
|
||||
}
|
||||
|
||||
@@ -61,7 +37,7 @@ func ArgonNumber(args ...any) (any, ArErr) {
|
||||
switch x := args[0].(type) {
|
||||
case string:
|
||||
if !numberCompile.MatchString(x) {
|
||||
return nil, ArErr{TYPE: "Number Error", message: "Cannot convert type '" + typeof(x) + "' to a number", EXISTS: true}
|
||||
return nil, ArErr{TYPE: "Number Error", message: "Cannot convert type '" + x + "' to a number", EXISTS: true}
|
||||
}
|
||||
N, _ := newNumber().SetString(x)
|
||||
return N, ArErr{}
|
||||
@@ -84,6 +60,11 @@ func ArgonSqrt(a ...any) (any, ArErr) {
|
||||
return nil, ArErr{TYPE: "sqrt", message: "sqrt takes 1 argument",
|
||||
EXISTS: true}
|
||||
}
|
||||
if typeof(a[0]) != "number" {
|
||||
return nil, ArErr{TYPE: "Runtime Error", message: "sqrt takes a number not a '" + typeof(a[0]) + "'",
|
||||
EXISTS: true}
|
||||
}
|
||||
|
||||
r := a[0].(number)
|
||||
|
||||
if r.Sign() < 0 {
|
||||
|
||||
Reference in New Issue
Block a user