tiancaiamao / shen-go

A Go implementation of the Shen programming language
Other
55 stars 4 forks source link

partial apply does not work well when providing more arguments than the required parameters #25

Closed tiancaiamao closed 3 years ago

tiancaiamao commented 3 years ago
(defun return (x) (lambda (k) (k x)))
(defun add1 (n)
  (return (+ n 1)))
(add1 4 (lambda (x) x)) 

Got:

Panic: can't apply object
Recovered in Eval: (add1 4 (lambda (x) x))
Error(goroutine 1 [running]:
github.com/tiancaiamao/shen-go/kl.Eval.func1(0xc00022c678, 0xc0000afd98)
        /media/genius/OS/project/src/github.com/tiancaiamao/shen-go/kl/eval.go:144 +0xaf
panic(0x846e00, 0x91d990)
        /home/genius/sdk/go1.16beta1/src/runtime/panic.go:965 +0x1b9
github.com/tiancaiamao/shen-go/kl.apply(0xc0000732c0)
        /media/genius/OS/project/src/github.com/tiancaiamao/shen-go/kl/eval.go:215 +0x1749
github.com/tiancaiamao/shen-go/kl.trampoline(0xc0000732c0, 0xc0000afd08)
        /media/genius/OS/project/src/github.com/tiancaiamao/shen-go/kl/eval.go:63 +0x3f
github.com/tiancaiamao/shen-go/kl.evalExp(0xc0000732c0, 0xc00022c678, 0xc00000e030, 0x0)
        /media/genius/OS/project/src/github.com/tiancaiamao/shen-go/kl/eval.go:73 +0xbe
github.com/tiancaiamao/shen-go/kl.Eval(0xc0000732c0, 0xc00022c678, 0x0)
        /media/genius/OS/project/src/github.com/tiancaiamao/shen-go/kl/eval.go:152 +0x85
main.repl(0xc0000732c0)
        /media/genius/OS/project/src/github.com/tiancaiamao/shen-go/cmd/cora/main.go:66 +0x19f
main.main()
        /media/genius/OS/project/src/github.com/tiancaiamao/shen-go/cmd/cora/main.go:45 +0x445
)

Expected:

4 #> (add1 4 (lambda (x) x))
5

It should work as ((add1 4) (lambda (x) x))