Documentation ¶
Index ¶
Examples ¶
Constants ¶
This section is empty.
Variables ¶
This section is empty.
Functions ¶
func ParseExpression ¶
Types ¶
type Interpreter ¶
type Interpreter struct {
Root *Scope
}
func NewInterpreter ¶
func NewInterpreter() *Interpreter
func (*Interpreter) Eval ¶
func (i *Interpreter) Eval(program string) (any, error)
Example (Plus) ¶
interp := lisp.NewInterpreter() v, err := interp.Eval(`(+ 1 2 3)`) if err != nil { log.Fatal(err) } fmt.Println(lisp.Show(v))
Output: 6
Example (Println) ¶
interp := lisp.NewInterpreter() v, err := interp.Eval(`(fmt.Println "Hello, World!")`) if err != nil { log.Fatal(err) } fmt.Println(lisp.Show(v))
Output: Hello, World! (14 ())
Example (Quasiquote) ¶
interp := lisp.NewInterpreter() v, err := interp.Eval(`#(a b 1.0 [3 $(+ 3 1) 5] $(+ 1 2 3))`) if err != nil { log.Fatal(err) } fmt.Println(lisp.Show(v))
Output: #(a b 1 [3 4 5] 6)
Example (Quote1) ¶
interp := lisp.NewInterpreter() v, err := interp.Eval(`#"example"`) if err != nil { log.Fatal(err) } fmt.Println(lisp.Show(v))
Output: #"example"
Example (Quote2) ¶
interp := lisp.NewInterpreter() v, err := interp.Eval(`#(+ 1 2 3)`) if err != nil { log.Fatal(err) } fmt.Println(lisp.Show(v))
Output: #(+ 1 2 3)
Example (String) ¶
interp := lisp.NewInterpreter() v, err := interp.Eval(`"example"`) if err != nil { log.Fatal(err) } fmt.Println(lisp.Show(v))
Output: "example"
func (*Interpreter) Execute ¶
func (i *Interpreter) Execute(program string) error
Example (List) ¶
interp := lisp.NewInterpreter() err := interp.Execute(` (set! a [1 2 3]) (fmt.Println a) (fmt.Println a.0) (fmt.Println a.1) (fmt.Println a.2) `) if err != nil { log.Fatal(err) }
Output: [1 2 3] 1 2 3
Example (Map) ¶
interp := lisp.NewInterpreter() err := interp.Execute(` (set! v {#a 1 #b 2 #c (+ 1 2)}) (fmt.Println v) (fmt.Println v.0) (fmt.Println v.1) (fmt.Println v.2) `) if err != nil { log.Fatal(err) }
Output: {#a 1 #b 2 #c 3} (#a 1) (#b 2) (#c 3)
type TokenizeError ¶
func (TokenizeError) Error ¶
func (e TokenizeError) Error() string
Click to show internal directories.
Click to hide internal directories.