GithubHelp home page GithubHelp logo

lips's Introduction

lips

Mini Lisp in 300 lines of Lisp

This is a very minimal Lisp interpreter written in Lisp. I made it because I wanted to learn Lisp and I was also interested in a Lisp project setup with tools like Roswell and fiveam.

It's nowhere near a full-fledged Lisp, nor does it intend to be, yet I found it to be a good exercise to make some Lisp in Lisp to get myself familiarized with a bit of Lisp.

Supported Features

  • nil, integers, symbols
  • define (not ANSI CL)
  • if
  • +, -, /, * and =
  • lambda
  • user-defined functions
  • lexically-scoped variables
  • progn
  • quote (data)
  • back quote interpolation
  • macro
  • macroexpand
Examples of Supported Codes
  • Recursive fibonacci function
(define fibonacci (lambda (n) (if (= n 0) nil (if (= n 1) 0 (if (= n 2) 1 (+ (fibonacci (- n 1)) (fibonacci (- n 2))))))))
(fibonacci 12)
; 89
  • unless macro
(defmacro unless (cond body) `(if ,cond () ,body))
(macroexpand '(unless (= 3 4) 1))
; (if (= 3 4) NIL 1)
(unless (= 3 4) 1)
; 1
  • Back quote interpolation & evaluation
(define n 3)
`,(+ 2 n)
; 5

How to Run

Clone the project under local-projects directory of Quicklisp or Roswell, and run commands as below.

Using Roswell
./roswell/lips.ros
Using Quicklisp
(ql:quickload '(:lips) :silent t)
(lips:lips)
Exit
(lips:exit)

Test

(ql:quickload :fiveam)
(load #p"lips.asd")
(load #p"lips-test.asd")
(asdf:test-system :lips)

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.