OwnLang - dynamic functional programming language inspired by Scala and Python. Available for PC, Android and Java ME devices.
Free | Pro | Desktop |
---|---|---|
![]() | ![]() | v2.1.0 |
Also available as AUR package:
yay -S ownlang
Functions are values, so we can store them to variables for operating.
operations = { "+" : def(a,b) = a+b, "-" : def(a,b) = a-b, "*" : def(a,b) = a*b, "/" : ::division } def division(v1, v2) { if (v2 == 0) return "error: division by zero" return v1 / v2 } for name, operation : operations { println "2 " + name + " 3 = " + operation(2, 3) }
Pattern matching with value pattern, tuple pattern, list pattern and optional condition.
def factorial(n) = match n { case 0: 1 case n if n < 0: 0 case _: n * factorial(n - 1) } def fizzbuzz(limit = 100) { for i = 1, i <= limit, i++ { println match [i % 3 == 0, i % 5 == 0] { case (true, false): "Fizz" case (false, true): "Buzz" case (true, true): "FizzBuzz" case _: i } } } // run fizzbuzz()
Operate data in functional style.
use std, functional nums = [1,2,3,4,5,6,7,8,9,10] nums = filter(nums, def(x) = x % 2 == 0) // Squares of even numbers squares = map(nums, def(x) = x * x) foreach(squares, ::echo) // Sum of squares sum = reduce(squares, 0, def(x, y) = x + y) println "Sum: " + sum // Same using stream println "Sum: " + stream(range(1, 11)) .filter(def(x) = x % 2 == 0) .map(def(x) = x * x) .reduce(0, def(x, y) = x + y)
Why not?
use std, types, math def `..`(a, b) = range(a, b) def `**`(a, b) = int(pow(a, b)) for y : 1 .. 10 { println sprintf("2 ^ %d = %d", y, 2 ** y) }
Easy async HTTP requests with http
module.
use std, http, functional, json // GET request http("https://api.github.com/events", def(r) { events = jsondecode(r) println events[0] }) // POST request http("http://jsonplaceholder.typicode.com/users", "POST", { "name": "OwnLang", "versionCode": 10 }, ::echo) // PATCH request http("http://jsonplaceholder.typicode.com/users/2", "PATCH", {"name": "Patched Name"}, ::patch_callback) def patch_callback(v) { println v }
Build using Gradle ./gradlew shadowJar
or take a look to latest release for binaries.
To run script use command
java -jar OwnLang.jar -f input.own
or
java -jar OwnLang.jar < input.own
MIT - see MIT license information