sabre
sabre copied to clipboard
Sabre is highly customisable, embeddable LISP engine for Go. :computer:
I have finished migrating Wetware over to Slurp. We should archive this repository ASAP to avoid confusion.
Hi, how do I invoke an `Invokable` with `List` as its argument without the `List` is being evaluated? Here's a simple implementation to create a reduce function which requires the...
This PR has the new structure and types as per the discussions on #25 . New contracts are nested within a sub-package `sabre` for the time being (Just to make...
As part of [Wetware](http://github.com/wetware/ww), the need has arisen reimplement virtually every atom. Accordingly, I also need to adjust the map of predefined symbols to reflect my own implementation of `Nil`,...
I have been working on an implementation of the 'case' construct and the package layout including how tests are maintained is causing a bit of pain. I suggest moving the...
It is currently impractical to build specials outside sabre (eg my case implementation in #22) because functions like 'analyze' are not exported.
I'd like to be able to call a function in a separate goroutine using the following syntax: ```lisp (go (expensive-function arg1 arg2)) ``` A few design considerations: 1. Separate goroutines...
1. define a macro that returns `[]` on expansion : `(def my-macro (macro* [& rest] []))` 2. create a list that would invoke `my-macro` when evaluated: `(def a-list '(my-macro 1...
I've just stumbled upon the [Joker language](https://github.com/candid82/joker), which is an implementation of Clojure in Go. I figured it might be of interest as inspiration for design.
Most of the Value types (except for Symbol, List, Vector, Set), return themselves on `Eval()`.. It seems like a redundant requirement to have all Values implement the `Eval()` method when...