Ai Dreams Forum

Member's Experiments & Projects => General Project Discussion => Topic started by: Zero on October 08, 2018, 10:34:52 am

Title: Nanolang
Post by: Zero on October 08, 2018, 10:34:52 am
No no, it isn't lisp, really. But it uses parentheses.

Any decent programmer could survive with just assignment, loops, and conditionals, would you agree?

This is a symbol:
a

This is a list:
(a b c)

This is a quoted symbol:
'a

Quoted symbols don't evaluate, as usual.

Lists starting with a defined symbol execute this symbol:
(+ 1 2 3 4)

This is a sum, which evaluates to 10.

Here is the fun part.

Assignment
Lists starting with a quoted symbol assign their cdr to the symbol:
('toys ("a ball" "a cowboy" "a doll"))

Conditional
Lists starting with a boolean evaluate their cdr if the boolean is true:
((< age 80) print "Forever young!!!")

Loop
Lists starting with a 2 elements list evaluate to a for-each loop:
((toys t) print (& "I have " t))

Zip.
Title: Re: Nanolang
Post by: Zero on October 09, 2018, 08:26:12 am
There was a mistake in the loop form (the iterator t should be a symbol 't) + I went a little further.

Next step was obvious, what's a language without function? Ok, we can't live without them, but they rock.

Assignment
Lists starting with a quoted symbol assign their cdr to the symbol:
('toys ("a ball" "a cowboy" "a doll"))

Conditional
Lists starting with a boolean evaluate their cdr if the boolean is true:
((< age 80) print "Forever young!!!")

Loop
Lists starting with a 2 elements list evaluate to a for-each loop:
((toys 't) print (& "I have " t))

Lambda
Lists starting with a quoted list of symbols evaluate to a lambda:
('(x y) sqrt (+ (sqr x) (sqr y)))

Unlike Lisp, a function body made of several expressions returns the first available value, instead of the last. This is because IFs have no ELSEs (if the THEN part is executed, the function returns its value, else it continues evaluation of its body until it has something to return).