Why must the variable c be declared outside and before the function definition my-counter!.
[ If you put it inside the value is always "reset"]
Comparison of a counter in racket-scheme and sbcl-lisp
A counter in racket-scheme:
``` #lang typed/racket
(define my-counter! (let ([t 0]) (lambda () (set! t (+ 1 t)) t);lambda );let );define (print (my-counter!)) (print (my-counter!)) ```
A counter in sbcl-lisp:
``` load "~/quicklisp/setup.lisp")
(declaim (optimize (speed 3) (safety 3)))
(let ((c 0)) (defun my-counter! () (lambda () (setf c (+ 1 c)) c); lambda ) ;defun ) ;let
(defun main () (print (funcall (my-counter!))) (print (funcall (my-counter!))) )
(sb-ext:save-lisp-and-die "test.exe" :toplevel #'main :executable t)
```
Could someone elaborate why i need "funcall" in lisp and not in scheme ? And why the different placing of let ?
After analyzing i will focus on racket & sbcl & haskell.
Why ? Many libraries & descend books.
My favorite scheme/lisp implementations are sbcl/racket/chicken.
Not because of speed or portability but mainly because of available libraries.
Stating the obvious.
How to compare r6rs-standard & ansi-common-lisp
What are the strengths , weaknesses. How to compare sbcl with clojure