Adds bitwise operations
This commit is contained in:
parent
dd6d87cc83
commit
5e151ceda9
|
@ -203,7 +203,7 @@ Quote and list both have some syntactic sugar to create a shorthand for their us
|
|||
|
||||
Implemented:
|
||||
|
||||
`positive?`, `negative?`, `zero?`, `abs`, `floor`, `ceil`, `round`, `+`, `-`, `*`, `/`, `min`, `max`, `number->string`, `rune->string`, `rand`, `rand-seed`, `%`, `exp`, `cos`, `sin`, `tan`, `sqrt`, `atan`, `sqrt`
|
||||
`positive?`, `negative?`, `zero?`, `abs`, `floor`, `ceil`, `round`, `+`, `-`, `*`, `/`, `min`, `max`, `number->string`, `rune->string`, `rand`, `rand-seed`, `%`, `exp`, `cos`, `sin`, `tan`, `sqrt`, `atan`, `sqrt`, `&`, `|`, `^`, `>>`, `<<`
|
||||
|
||||
|
||||
<details>
|
||||
|
@ -228,6 +228,11 @@ Implemented:
|
|||
<li><code>(- [number...])</code>: <code>number</code></li>
|
||||
<li><code>(* [number...])</code>: <code>number</code></li>
|
||||
<li><code>(/ [number...])</code>: <code>number</code></li>
|
||||
<li><code>(& [number] [number])</code>: <code>number</code></li>
|
||||
<li><code>(| [number] [number])</code>: <code>number</code></li>
|
||||
<li><code>(^ [number] [[number]])</code>: <code>number</code></li>
|
||||
<li><code>(<< [number] [number])</code>: <code>number</code></li>
|
||||
<li><code>(>> [number] [number])</code>: <code>number</code></li>
|
||||
<li><code>(exp [number] [number])</code>: <code>number</code></li>
|
||||
<li><code>(min [number...])</code>: <code>number</code></li>
|
||||
<li><code>(max [number...])</code>: <code>number</code></li>
|
||||
|
|
73
lib.go
73
lib.go
|
@ -224,6 +224,79 @@ var stdLibrary = vars{
|
|||
}
|
||||
return number(math.Round(float64(num)*math.Pow(10, float64(decimals))) / math.Pow(10, float64(decimals)))
|
||||
},
|
||||
"&": func(a ...expression) expression {
|
||||
if len(a) < 2 {
|
||||
return exception("'&' expected two numbers, insufficient arguments were given")
|
||||
}
|
||||
n1, ok := a[0].(number)
|
||||
if !ok {
|
||||
return exception("'&' expected argument one to be a number, a non-number value was given")
|
||||
}
|
||||
n2, ok2 := a[1].(number)
|
||||
if !ok2 {
|
||||
return exception("'&' expected argument two to be a number, a non-number value was given")
|
||||
}
|
||||
return number(int(n1) & int(n2))
|
||||
},
|
||||
"|": func(a ...expression) expression {
|
||||
if len(a) < 2 {
|
||||
return exception("'|' expected two numbers, insufficient arguments were given")
|
||||
}
|
||||
n1, ok := a[0].(number)
|
||||
if !ok {
|
||||
return exception("'|' expected argument one to be a number, a non-number value was given")
|
||||
}
|
||||
n2, ok2 := a[1].(number)
|
||||
if !ok2 {
|
||||
return exception("'|' expected argument two to be a number, a non-number value was given")
|
||||
}
|
||||
return number(int(n1) | int(n2))
|
||||
},
|
||||
"<<": func(a ...expression) expression {
|
||||
if len(a) < 2 {
|
||||
return exception("'<<' expected two numbers, insufficient arguments were given")
|
||||
}
|
||||
n1, ok := a[0].(number)
|
||||
if !ok {
|
||||
return exception("'<<' expected argument one to be a number, a non-number value was given")
|
||||
}
|
||||
n2, ok2 := a[1].(number)
|
||||
if !ok2 {
|
||||
return exception("'<<' expected argument two to be a number, a non-number value was given")
|
||||
}
|
||||
return number(int(n1) << int(n2))
|
||||
},
|
||||
">>": func(a ...expression) expression {
|
||||
if len(a) < 2 {
|
||||
return exception("'>>' expected two numbers, insufficient arguments were given")
|
||||
}
|
||||
n1, ok := a[0].(number)
|
||||
if !ok {
|
||||
return exception("'>>' expected argument one to be a number, a non-number value was given")
|
||||
}
|
||||
n2, ok2 := a[1].(number)
|
||||
if !ok2 {
|
||||
return exception("'>>' expected argument two to be a number, a non-number value was given")
|
||||
}
|
||||
return number(int(n1) >> int(n2))
|
||||
},
|
||||
"^": func(a ...expression) expression {
|
||||
if len(a) < 2 {
|
||||
return exception("'^' expected two numbers, insufficient arguments were given")
|
||||
}
|
||||
n1, ok := a[0].(number)
|
||||
if !ok {
|
||||
return exception("'^' expected argument one to be a number, a non-number value was given")
|
||||
}
|
||||
if len(a) == 1 {
|
||||
return number(^int(n1))
|
||||
}
|
||||
n2, ok2 := a[1].(number)
|
||||
if !ok2 {
|
||||
return exception("'^' expected argument two to be a number, a non-number value was given")
|
||||
}
|
||||
return number(int(n1) ^ int(n2))
|
||||
},
|
||||
"+": func(a ...expression) expression {
|
||||
if len(a) == 0 {
|
||||
return number(0)
|
||||
|
|
|
@ -20,7 +20,12 @@ var usageStrings = map[string]string{
|
|||
"*": "(* [number...]) => number\n\nMultiplys the given numbers and returns the result, If only one number is provided then 1 is divided by it and the result is returned",
|
||||
"/": "(/ [number...]) => number\n\nDivides the given numbers, left to right, and returns the result. If only one number is provided it is simply returned",
|
||||
"%": "(% [number] [number]) => number\n\nReturns the modulus of two numbers",
|
||||
"sqrt": "(% [number]) => number\n\nReturns the square root of the given number",
|
||||
"&": "(& [number] [number]) => number\n\nReturns the bitwise AND of two numbers",
|
||||
"|": "(| [number] [number]) => number\n\nReturns the bitwise OR of two numbers",
|
||||
"^": "(^ [number] [[number]]) => number\n\nReturns the bitwise XOR of two numbers, or the bitwise NOT of a single number",
|
||||
"<<": "(<< [number] [number]) => number\n\nBit shifts the first number left by the second number",
|
||||
">>": "(>> [number] [number]) => number\n\nBit shifts the first number right by the second number",
|
||||
"sqrt": "(sqrt [number]) => number\n\nReturns the square root of the given number",
|
||||
"atan": "(atan [number] [[number]]) => number\n\nIf one number is given returns the atan of that number, if two numbers are given returns the atan2 of the two given numbers",
|
||||
"tan": "(tan [number] [[number]]) => number\n\nReturns the tan of the given number",
|
||||
"log": "(log [number]) => number\n\nReturns the natural log of the given number",
|
||||
|
|
Loading…
Reference in New Issue
Block a user