diff --git a/easylang.html.markdown b/easylang.html.markdown new file mode 100644 index 00000000..fc494e6c --- /dev/null +++ b/easylang.html.markdown @@ -0,0 +1,221 @@ +--- +language: Easylang +contributors: + - ["chkas", "https://github.com/chkas"] +filename: easylang.el +--- + +**Easylang** is a simple programming language with built-in graphical functions and an easy-to-use and offline usable browser IDE. Its simple syntax and semantics make it well suited as a teaching and learning programming language. You can also use it to write graphical applications that you can embed in a web page. + +*Easylang* is statically typed and has as data types only strings and numbers (floating point), resizeable arrays of strings and numbers and arrays of arrays. + +[The browser IDE](https://easylang.online/ide/) includes various tutorials, including one for beginners. + +``` +print "Hello world" +# +# number variable (64 bit floating point) +# +h = 3.14 +print h +# +# string variable +# +str$ = "monkey" +# strings can grow +str$ &= " circus" +print str$ +# +# blocks end with 'end' or a dot, a newline has no +# other meaning than a space +# +for i = 1 to 5 + sum += i * i +. +print sum +# +# functions have value and reference +# parameters, no return values +# +func gcd a b . res . + # a and b are value parameters + # res is a reference parameter + while b <> 0 + # h is a local variable, because + # it is first used in the function + h = b + b = a mod b + a = h + . + res = a +. +call gcd 120 35 r +print r +# +# strings can be concatenated and numbers are +# automatically converted to strings +# +print "1 + 2 = " & 1 + 2 +# +# array of numbers +# +a[] = [ 2.1 3.14 3 ] +# +# arrays can grow +a[] &= 4 +print a[] +# +# arrays, strings and numbers are copied by value +# +b[] = a[] +a[] &= 4 +print a[] ; print b[] +# +# array swapping ist fast +# +swap a[] b[] +print a[] ; print b[] +# +# array of strings +# +fruits$[] = [ "apple" "banana" "orange" ] +# +# for-in iterates over the elements of an array +# +for fruit$ in fruits$[] + print fruit$ +. +# +# strings are also used for single characters +# +letters$[] = str_chars "ping" +print letters$[] +letters$[1] = "o" +print str_join letters$[] +# +# 2-dimensional arrays are arrays of arrays +# this defines 3 arrays with length 4 +# +len a[][] 3 +for i range len a[][] + len a[i][] 4 +. +a[1][2] = 99 +print a[][] +# +# builtin functions +if sin 90 = 1 + print "angles are in degree" +. +print pow 2 8 +# seconds since 1970 +print floor sys_time +# random numbers +print randomf +print random 6 + 1 +# +# hour and minutes +print substr time_str sys_time 11 5 +# +print str_ord "A" +print str_chr 65 +# +# set number format +numb_fmt 0 4 +print sqrt 2 +print pi +print logn 10 +# +a$[] = str_split "10,15,22" "," +print a$[] +print 2 * number a$[0] +print len a$[] +print len "Hello" +# +# With 'break n' you can leave nested loops and a function +# +names$[] = [ ] +func name2id name$ . id . + for id range len names$[] + if names$[id] = name$ + # leave loop and function + break 2 + . + . + names$[] &= name$ +. +call name2id "alice" id ; print id +call name2id "bob" id ; print id +call name2id "alice" id ; print i +# +# with 'repeat' you can make loops, which you can leave +# in the loop body using 'until' +# +sum = 0 +repeat + s$ = input + until s$ = "" + sum += number s$ +. +print "sum: " & sum +# +# "input" reads a string from the "input_data" section, +# if it exists, otherwise via a prompt. +# +input_data +10 +-2 +6 +``` + +Built-in graphic primitives and event-driven programming + +``` +# simple drawing with the mouse +# +set_linewidth 4 +set_color 900 +# the colors are coded from 0 to 999, with +# the left digit specifying the red component, +# the middle digit the green component and +# the right digit the blue component. +# +on mouse_down + down = 1 + move_pen mouse_x mouse_y + # moves the drawing pen to the actual mouse position + draw_circle 2 +. +on mouse_up + down = 0 +. +on mouse_move + if down = 1 + draw_line mouse_x mouse_y + . +. +``` + +``` +# an animated pendulum +# +on animate + # The animate event occurs after each screen refresh. + # + clear_screen + move_pen 50 50 + draw_circle 1 + x = 50 + 40 * sin ang + y = 50 - 40 * cos ang + draw_line x y + draw_circle 5 + vel += sin ang / 5 + ang += vel +. +ang = 10 +``` + +* [More about Easylang](https://easylang.online/) + +* [Source code](https://github.com/chkas/easylang) +