bilang

command module
v0.0.0-...-0e190f9 Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: Jun 20, 2021 License: MIT Imports: 2 Imported by: 0

README

Go Go Reference

Bilang

Bilang (Bahasa is not a language) adalah sebuah interpreter untuk bahasa pemrograman berbahasa indonesia.

Bilang tidak mengikuti kaidah berbahasa Indonesia yang baik dan benar ketika melakukan terjemahan dari Bahasa Inggris ke Bahasa Indonesia, hal tersebut disengaja agar tidak kehilangan arti aslinya, kita lebih paham World Wide Web (www) daripada Waring Wera Wanua.

Fitur yang sudah bisa digunakan:

  • REPL
    go run .

atau

    cat script.bi | go run .
  • Variabel
var a = "halo dunia"
println(a)

  • Konstanta
konst a = "halo dunia"
println(a)
  • Fungsi adalah First class citizen
var reduce = fn(arr, init, f) {
    var iter = fn(arr, hasil) {
        jika (panjang(arr) == 0) { pilih hasil };
        iter(ekor(arr), f(hasil, awal(arr)))
    }
    iter(arr, init)
}

var sum = arr => reduce(arr, 0, fn(init, nilai){ init+nilai })	
sum([1,2,3,4,5])
  • Pipe operator
var reduce = fn(arr, init, f) {
    var iter = fn(arr, hasil) {
        jika (panjang(arr) == 0) { pilih hasil };
        iter(ekor(arr), f(hasil, arr |> awal))
    }
    iter(arr, init)
}

var sum = arr => reduce(arr, 0, fn(init, nilai){ init+nilai })
var map = fn(arr, f) {
    var iter = fn(arr, akum) {
        jika (panjang(arr) == 0) { pilih akum }
        var hasil = push(akum, arr |> awal |> f)
        iter(arr |> ekor, hasil)
    }
    iter(arr, [])
}

var a = [1,2,3,4,5]
var ganda = x => x*2
map(a, ganda) |> sum

  • Strict typing

$ echo '
 var a = "string"
 a = 10
 ' | go run .
ERROR: perubahan tipe variabel a dari STRING menjadi FLOAT tidak diizinkan

  • Switch statement
var rgb_ke_hsl = fn(arr) {
    var r = arr[0]/255
    var g = arr[1]/255
    var b = arr[2]/255
    var max = math.Max(r, math.Max(g, b))
    var min = math.Min(r, math.Min(g, b))
    var h = 0
    var l = (max+min)/2
    var d = max - min
    var s = jika (l > 1/2) {
        d / (2 - max - min)
    } atau {
        d / (max + min)
    }

    h = pilah max {
        r -> (g - b) / d + jika (g < b) { 6 } atau { 0 }
        g -> (b - r) / d + 2
        b -> (r - g) / d + 4
    }

    pilih [h, s, l]
}

var merah_rgb = [255, 0, 0]
var merah_hsl = rgb_ke_hsl(merah_rgb)

stdout("merah_rgb = ", merah_rgb, "\n")
stdout("merah_hsl = ", merah_hsl, "\n")

  • Dan lainnya

TODO:

  • Komentar
  • Error handling
  • Tipe Data Integer
  • Notasi angka float (dan eksponen)
  • Standard library
  • Testing ala go test
  • Notasi pendek variabel menggunakan := seperti Go
  • Modul sistem (ekspor & impor)

Repo ini pada awalnya dibuat sebagai tempat latihan saat membaca buku Writing An Interpreter In Go maka dari itu akan ada banyak kesamaan struktur kode dengan Monkey Language. Pull request welcome.

Documentation

The Go Gopher

There is no documentation for this package.

Directories

Path Synopsis

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL