2025-11-10 20:44:10 +11:00
2025-11-15 13:52:23 +11:00
2025-11-15 13:52:23 +11:00
2025-11-10 20:44:10 +11:00
2025-11-10 20:44:10 +11:00
2025-11-15 13:52:23 +11:00

Pipple

Pipple is a simple Lisp-family programming language.

Getting started

Pipple builds with CMake. Run the following to build Pipple:

cmake -B build -DCMAKE_BUILD_TYPE=Release
cmake --build build

The pipple executable will be placed in the build folder.

Coding with Pipple

Pipple's interpreter provides a REPL for fast prototyping. Try it out by running the pipple command without any arguments.

$ ./build/pipple
pipple>

Pipple code you write will be run now. Try something like (print "Hello, World!"). See what happens!

If you'd like to use Pipple with a file, just add the filename after the executable path.

Syntax

Pipple's syntax looks like most other Lisps. You enclose your statements in ( and ).

Printing

(print "Hello, World!")
(print 32)
(print 3.141)

Setting and Changing Variables

(let x 3.141)
(print x)
(set x 2.712)
(print x)

Math

Remember: Polish notation is the key!

(let x (+ 3 4))
(print x)

(let y (* 5 6 2))
(print y)

(print (/ 10 2))

(print (- 10 5))

Conditionals

In Pipple, nil is the only non-truthy value. Every non-nil value is truthy.

(let x 0)
(if (== x 0)
    (print "x is zero")
    (set x 1)
    (print "now it is" x)
)

(while (!= x 5)
    (print "x is currently" x "which is not 5. i must make it 5")
    (set x (+ x 1))
)
(print "now x is" x)

User console input

(let x (input))
(print "You said" x)

Lists

(list item1 item2 item3)
(list "hi there" 32 nil)

Functions

Pipple functions require type annotations. They are also first class.

Functions are defined with the following syntax:

(function returntype [argtype argname argtype argname] (code) (morecode))

(let x (function int [int x]
    (return (* x 5))
))

(print (x 3))

Valid types in Pipple are:

  • int
  • double
  • string
  • list
Description
A Lisp dialect. Simple to learn, easy to read, fast to run.
Readme 84 KiB
Languages
C++ 99.9%