add comparisons

This commit is contained in:
2023-03-08 00:15:26 +00:00
parent dfb93c60b4
commit 11ed803601
15 changed files with 416 additions and 88 deletions

View File

@@ -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 {