Skip to content
Another Scheme dialect written in Java
Branch: master
Clone or download
Fetching latest commit…
Cannot retrieve the latest commit at this time.


Type Name Latest commit message Commit time
Failed to load latest commit information.
.gitignore add normal-order branch link Mar 5, 2016


The very first toy language I wrote for studying the essence of programing language.

JCScheme = Jiacai's Scheme 😊


1. S-expression

JCScheme use S-expression internally to represent AST like any other Scheme.

FYI, diagram below is the S-expression of (+ 1 2 (* 3 4)) behind AST_demo

2. eval-apply cycle

As for evaluating code, JCScheme models after eval-apply cycle described in SICP 4.1

eval-apply cycle

More explanations can be found in my Chinese blog 《我的第一个玩具语言 JCScheme 问世了》


git clone
cd JCScheme; mvn clean package
java -jar target/JCScheme-*.jar

You can install rlwrap to support line editing, persistent history and completion.

# ubuntu
sudo apt-get install rlwrap
# centos
sudo yum install rlwrap
# Mac
brew install rlwrap  # for Homebrew
port install rlwrap  # for MacPorts

Then, run JCScheme like this

rlwrap java -jar target/JCScheme-*.jar


  1. datatype
    • number
    • bool
    • string
    • pair
    • list
    • function
  2. builtin keywords
    • if
    • def
    • lambda
  3. builtin functions
    • bool: andornot
    • number: +-*/><=
    • pair/list: conscarcdrlistnull?
    • string: str=?
    • other: print

Code snippets can be found in ChangeLog



MIT License © Jiacai Liu

You can’t perform that action at this time.