added quote
parent
29677e19e4
commit
107565dc04
@ -1,42 +0,0 @@
|
|||||||
(+ 1 (+ 1 1) (dave (sam 1)))
|
|
||||||
|
|
||||||
; alright I have comments now!!!!
|
|
||||||
; woooohooo!!!!
|
|
||||||
; nice nice nice
|
|
||||||
|
|
||||||
(+ 1
|
|
||||||
22.3
|
|
||||||
a
|
|
||||||
;here comes a comment
|
|
||||||
3.
|
|
||||||
(one two three)
|
|
||||||
"this is a string"
|
|
||||||
4.0
|
|
||||||
((one two) three)
|
|
||||||
abøne
|
|
||||||
(dave
|
|
||||||
1
|
|
||||||
"here's an escaped quote: \" how neat!!!"
|
|
||||||
2
|
|
||||||
"and here;'s an escaped \\, sweet!"
|
|
||||||
albert-camus
|
|
||||||
3
|
|
||||||
(sam 3 2 2)))
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
(begin (set! x 1)
|
|
||||||
(set! x (+ x 1))
|
|
||||||
(* x 2))
|
|
||||||
|
|
||||||
; ------------------------------------------------------------------------------
|
|
||||||
; the following stuff comes directly from the norvig essay, instead of being
|
|
||||||
; contrived lexer tests.
|
|
||||||
; ------------------------------------------------------------------------------
|
|
||||||
|
|
||||||
; define a function and then execute it
|
|
||||||
(begin (define r 3) (* 3.141592653 (* r r)))
|
|
||||||
|
|
||||||
; same thing, alternative form without "begin"
|
|
||||||
(define area (lambda (r) (* 3.141592653 (* r r))))
|
|
||||||
(area 3)
|
|
@ -0,0 +1,30 @@
|
|||||||
|
; ------------------------------------------------------------------------------
|
||||||
|
; literals
|
||||||
|
; ------------------------------------------------------------------------------
|
||||||
|
|
||||||
|
; integer
|
||||||
|
1
|
||||||
|
|
||||||
|
; float
|
||||||
|
3.14
|
||||||
|
|
||||||
|
; string
|
||||||
|
"jordan"
|
||||||
|
|
||||||
|
; ------------------------------------------------------------------------------
|
||||||
|
; basic math
|
||||||
|
; ------------------------------------------------------------------------------
|
||||||
|
|
||||||
|
(+ 1 1)
|
||||||
|
(- 1 1)
|
||||||
|
(* 1 1)
|
||||||
|
(/ 1 1)
|
||||||
|
|
||||||
|
; ------------------------------------------------------------------------------
|
||||||
|
; grammar
|
||||||
|
; ------------------------------------------------------------------------------
|
||||||
|
|
||||||
|
(define x 5)
|
||||||
|
x
|
||||||
|
|
||||||
|
(quote 1 2 3)
|
@ -0,0 +1,24 @@
|
|||||||
|
package main
|
||||||
|
|
||||||
|
import (
|
||||||
|
"fmt"
|
||||||
|
"reflect"
|
||||||
|
)
|
||||||
|
|
||||||
|
type special func(*environment, ...interface{}) (interface{}, error)
|
||||||
|
|
||||||
|
func define(env *environment, args ...interface{}) (interface{}, error) {
|
||||||
|
if len(args) != 2 {
|
||||||
|
return nil, fmt.Errorf(`received %d arguments in *define*, expected exactly 2`, len(args))
|
||||||
|
}
|
||||||
|
s, ok := args[0].(symbol)
|
||||||
|
if !ok {
|
||||||
|
return nil, fmt.Errorf(`first argument to *define* must be symbol, received %v`, reflect.TypeOf(args[0]))
|
||||||
|
}
|
||||||
|
env.set(s, args[1])
|
||||||
|
return nil, nil
|
||||||
|
}
|
||||||
|
|
||||||
|
func quote(_ *environment, args ...interface{}) (interface{}, error) {
|
||||||
|
return sexp(args), nil
|
||||||
|
}
|
Loading…
Reference in New Issue