Project

theta

0.0
No commit activity in last 3 years
No release in over 3 years
Theta was created as a learning project based off of lis.py and flea
2005
2006
2007
2008
2009
2010
2011
2012
2013
2014
2015
2016
2017
2018
2019
2020
2021
2022
2023
2024
2025
 Dependencies

Development

~> 1.0.0
~> 1.5.2
>= 0
 Project Readme

Theta¶ ↑

Theta is a Lisp interpreter for Ruby (though it’s really just a small subset of Lisp it interprets). It was heavily influenced by lis.py and flea. It was primarily made as a learning exercise.

How to use¶ ↑

Theta is distributed as a gem, so install by typing:

% gem install theta

After installation, simply type theta to get to the interactive interpreter prompt.

% theta
theta> (define a 2)
theta> (+ a 3)
5
theta> (define square 
theta>   (lambda (x) 
theta>     (* x x)))
theta> (square 3)
9

To exit, simply type ‘exit’ at the prompt.

Or, you can use the -f command line parameter to evaluate a file.

% theta -f test.scm

Alternately, you can use the -c parameter and pass in code directly.

% theta -c "(+ 3 2)"

And finally, you can use Theta inside your own Ruby programs, if that sounds like something you’d do.

require 'rubygems'
require 'theta'

t = Theta::Interpreter.new
t.run "(define n 15)"
puts t.run "(+ 10 n)"

Syntax¶ ↑

Theta uses a very simplified Lisp-like syntax.

Math¶ ↑

Theta has your basic mathematical functions.

theta> (+ 2 2 5)
9
theta> (- 3 2)
1
theta> (* 4 2)
8
theta> (/ 4 2)
2

Defining Functions and Variables¶ ↑

You also have the basic variable definition stuff.

theta> (define a 2)
theta> (+ a 3)
5

And functions.

theta> (define square (lambda (x) (* x x)))
theta> (square 3)
9

Conditionals and Truthiness¶ ↑

We have your basic if statement that will evaluate the first piece of code if true, otherwise the second (if you give it one).

theta> (if (= 2 2) (display "true") (display "not true"))
true
theta> (if (= 1 2) (display "true") (display "not true"))
not true

And some basic Boolean statements.

theta> (= 2 2)
true
theta> (> 1 2)
false
theta> (< 2 3)
true
theta> (>= 3 3 2)
true
theta> (<= 4 5 2)
false

Input and Output¶ ↑

Theta also has basic input and output.

theta> (display "poop")
poop
theta> (define a (input))
hi <this is user input>
theta> (display a)
hi

And a function to turn user input into an integer.

theta> (define a (string-to-num (input)))
123 <this is user input>
theta>(+ a 3)
126