/junction

Junction: a functional language

Primary LanguageJavaBSD 2-Clause "Simplified" LicenseBSD-2-Clause

#Junction

###Overview This is Junction, a functional programming language implemented in Java. The name is either a portmanteau of Java+Function, or Jayanth+Function. Or both.

###Language Features Currently, Junction is heavily based on Scheme/LISP, and its syntax is essentially identical, at least as of now. Functions are first class objects, and can be passed as parameters. Also, there is lexical closure - functions can be defined inside other functions, and their 'parent frame' is the frame in which they were defined. Tail call optimization is implemented, though not in the normal way. Ordinary functions defined with def are not optimized. Creation of a tail call optimized function requires using iter. This does not optimize mutual recursion.

###Example Code An example of lambdas (the actual lambda symbol 'λ' is supported!)

((def (f g) (+ (g 10) 4) ) (λ (u) (* (+ u 1) u)))

This evaluates to (10+1)*(10) + 4 = 114

Lists are now a thing

(get 3 (list 1 2 3 4 1000)) 

The list function constructs a new list, and get retrieves the value at the ith index. Thus, the above line would evaluate to 4.

Tail call optimization is here, though perhaps in a different guise than in proper Lisp or other functional languages. Here is iterative factorial.

(iter (factorial n i prod) (> i n) (n (+ i 1) (* prod i)) prod)

An iter is a special type of function that is designed for iteration. Creating an iterative function: (iter (name <params>) <until_cond> (<rebinds>) <base>). In essence, an iter is sort of (in fact, it literally is!) a "while loop" wrapper rather than a "true" tail recursive function.

###Current status

  • Basic runtime environment
  • Lexical analyzer
  • Parser
  • Lambdas
  • Iteration

###Source description

  • jayanth/junction contains the source .java files

  • bin contains the compiled .class files