Skip to content

Lisp Interpreter in the Ruby Programming Language - 70 LOC.

License

Notifications You must be signed in to change notification settings

the-best-lisp/lisp

 
 

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

lisp

Code Climate Test Coverage Build Status

Lisp Interpreter in the Ruby Programming Language - 70 LOC. Inspired by Lis.py.

$ lisp-repl
ctrl-c to exit
> (begin                                                                        
(>   (define incf                                                               
((>     (lambda (x)                                                             
(((>       (set! x (+ x 1))))                                                   
(>   (define one 1)                                                             
(>   (incf one))                                                                
2
>                                      

Install

Gem Version

gem install lisp

Features

  • constant literal number - A number evaluates to itself. Example: 12 or -3.45e+6

  • procedure call - (proc exp...) If proc is anything other than one of the symbols if, set!, define, lambda, begin, or quote then it is treated as a procedure. It is evaluated using the same rules defined here. All the expressions are evaluated as well, and then the procedure is called with the list of expressions as arguments. Example: (square 12) ⇒ 144

  • variable reference - var A symbol is interpreted as a variable name; its value is the variable's value. Example: x

  • definition - (define var exp) Define a new variable and give it the value of evaluating the expression exp. Examples: (define r 3) or (define square (lambda (x) (* x x))).

  • procedure - (lambda (var...) exp) Create a procedure with parameter(s) named var... and the expression as the body. Example: (lambda (r) (* 3.141592653 (* r r)))

  • conditional - (if test conseq alt) Evaluate test; if true, evaluate and return conseq; otherwise evaluate and return alt. Example: (if (< 10 20) (+ 1 1) (+ 3 3)) ⇒ 2

  • quotation - (quote exp) Return the exp literally; do not evaluate it. Example: (quote (a b c)) ⇒ (a b c)

  • assignment - (set! var exp) Evaluate exp and assign that value to var, which must have been previously defined (with a define or as a parameter to an enclosing procedure). Example: (set! x2 (* x x))

  • sequencing - (begin exp...) Evaluate each of the expressions in left-to-right order, and return the final value. Example: (begin (set! x 1) (set! x (+ x 1)) (* x 2)) ⇒ 4

About

Lisp Interpreter in the Ruby Programming Language - 70 LOC.

Resources

License

Stars

Watchers

Forks

Packages

No packages published

Languages

  • Ruby 100.0%