-
lispari: letrecScritto daNon Autenticatoil 2009-03-03 19:54:00.0 alle 2009-03-03 19:54:00.0in common lisp non c'è letrec. C'è altra robba tipo labels ma serve a definire solo funzioni.
Mi risulta però che in scheme letrec sia una macro perciò ho provato a farne una in clisp:(defmacro letrec (vars &body body) (if (endp vars) `(progn ,@body) (let ((v (car vars))) `(let ((,(car v) nil)) (setf ,(car v) ,@(cdr v)) (letrec ,(cdr vars) ,@body)))))
ho scritto una merdomacro? perché sembrerebbe anche funzionare...-
Re: lispari: letrec
- Scritto da:
> in common lisp non c'è letrec. C'è altra robba
> tipo labels ma serve a definire solo
> funzioni.
>
> Mi risulta però che in scheme letrec sia una
> macro perciò ho provato a farne una in
> clisp:
>
>> (defmacro letrec (vars &body body) > (if (endp vars) > `(prot ,@body) > (let ((v (car vars))) > `(let ((,(car v) nil)) > (setf ,(car v) ,@(cdr v)) > (letrec ,(cdr vars) ,@body))))) >
>
> ho scritto una merdomacro? perché sembrerebbe
> anche
> funzionare...
fix'd
-
Re: lispari: letrecScritto daavvelentaniCubicolarioil 2009-03-03 20:28:00.0 alle 2009-03-03 20:28:00.0Trollate totali: 18184
- Scritto da: achille97
>
> - Scritto da:
> > in common lisp non c'è letrec. C'è altra robba
> > tipo labels ma serve a definire solo
> > funzioni.
> >
> > Mi risulta però che in scheme letrec sia una
> > macro perciò ho provato a farne una in
> > clisp:
> >
> >> > (defmacro letrec (vars &body body) > > (if (endp vars) > > `(prot ,@body) > > (let ((v (car vars))) > > `(let ((,(car v) nil)) > > (setf ,(car v) ,@(cdr v)) > > (letrec ,(cdr vars) ,@body))))) > >
> >
> > ho scritto una merdomacro? perché sembrerebbe
> > anche
> > funzionare...
>
> fix'd
I think happiness is love
- Vladimir Putin
-
-
Re: lispari: letrecScritto daNon Autenticatoil 2009-03-03 20:04:00.0 alle 2009-03-03 20:04:00.0- Scritto da:
> in common lisp non c'è letrec. C'è altra robba
> tipo labels ma serve a definire solo
> funzioni.
>
> Mi risulta però che in scheme letrec sia una
> macro perciò ho provato a farne una in
> clisp:
>
>> (defmacro letrec (vars &body body) > (if (endp vars) > `(progn ,@body) > (let ((v (car vars))) > `(let ((,(car v) nil)) > (setf ,(car v) ,@(cdr v)) > (letrec ,(cdr vars) ,@body))))) >
>
> ho scritto una merdomacro? perché sembrerebbe
> anche
> funzionare...
niente ho un use case per il quale la macro sopra deve essere iterativa, non ricorsiva...-
Re: lispari: letrecScritto daNon Autenticatoil 2009-03-03 20:18:00.0 alle 2009-03-03 20:18:00.0
> >
> > ho scritto una merdomacro? perché sembrerebbe
> > anche
> > funzionare...
>
> niente ho un use case per il quale la macro sopra
> deve essere iterativa, non
> ricorsiva...
l'ultima incarnazione(defmacro letrec (bindings &body body) `(let ,(mapcar (lambda (x) `(,(car x) nil)) bindings) ,@(mapcar (lambda (x) `(setf ,(car x) ,@(cdr x))) bindings) ,@body))-
Re: lispari: letrecScritto daavvelentaniCubicolarioil 2009-03-03 20:26:00.0 alle 2009-03-03 20:26:00.0Trollate totali: 18184
- Scritto da:
>
> > >
> > > ho scritto una merdomacro? perché sembrerebbe
> > > anche
> > > funzionare...
> >
> > niente ho un use case per il quale la macro
> sopra
> > deve essere iterativa, non
> > ricorsiva...
>
> l'ultima incarnazione
>
>> (defmacro letrec (bindings &body body) > `(let ,(mapcar (lambda (x) `(,(car x) nil)) > bindings) > ,@(mapcar (lambda (x) `(setf ,(car x) ,@(cdr > x))) > bindings) > ,@body)) >
Ma per cos'e` che hai bisogno di letrec e labels non va bene?I think happiness is love
- Vladimir Putin-
Re: lispari: letrecScritto daNon Autenticatoil 2009-03-03 20:33:00.0 alle 2009-03-03 20:33:00.0
- Scritto da: avvelentani
>
> - Scritto da:
> >
> > > >
> > > > ho scritto una merdomacro? perché
> sembrerebbe
> > > > anche
> > > > funzionare...
> > >
> > > niente ho un use case per il quale la macro
> > sopra
> > > deve essere iterativa, non
> > > ricorsiva...
> >
> > l'ultima incarnazione
> >
> >> > (defmacro letrec (bindings &body body) > > `(let ,(mapcar (lambda (x) `(,(car x) nil)) > > bindings) > > ,@(mapcar (lambda (x) `(setf ,(car x)
> ,@(cdr > > x))) > > bindings) > > ,@body)) > >
>
> Ma per cos'e` che hai bisogno di letrec e labels
> non va
> bene?
per le stream definite implicitamente: ho qui il belink
http://mitpress.mit.edu/sicp/full-text/book/book-Z...
-
Re: lispari: letrecScritto daavvelentaniCubicolarioil 2009-03-03 20:41:00.0 alle 2009-03-03 20:41:00.0Trollate totali: 18184
- Scritto da:
>
> - Scritto da: avvelentani
> >
> > - Scritto da:
> > >
> > > > >
> > > > > ho scritto una merdomacro? perché
> > sembrerebbe
> > > > > anche
> > > > > funzionare...
> > > >
> > > > niente ho un use case per il quale la macro
> > > sopra
> > > > deve essere iterativa, non
> > > > ricorsiva...
> > >
> > > l'ultima incarnazione
> > >
> > >> > > (defmacro letrec (bindings &body body) > > > `(let ,(mapcar (lambda (x) `(,(car x) nil)) > > > bindings) > > > ,@(mapcar (lambda (x) `(setf ,(car x)
> > ,@(cdr > > > x))) > > > bindings) > > > ,@body)) > > >
> >
> > Ma per cos'e` che hai bisogno di letrec e labels
> > non va
> > bene?
>
> per le stream definite implicitamente: ho qui il
> belink
>
> http://mitpress.mit.edu/sicp/full-text/book/book-Z
secondo me puoi definire stream-cons in modo che 'ones' non abbia bisogno di essere definito.I think happiness is love
- Vladimir Putin-
Re: lispari: letrecScritto daNon Autenticatoil 2009-03-03 20:47:00.0 alle 2009-03-03 20:47:00.0
> > per le stream definite implicitamente: ho qui il
> > belink
> >
> >
> http://mitpress.mit.edu/sicp/full-text/book/book-Z
>
> secondo me puoi definire stream-cons in modo che
> 'ones' non abbia bisogno di essere
> definito.
in quel caso specifico si ma cons-stream è definito in modo che il 'cdr' non sia valutato immediatamente (vedi sotto per i particolari).
Ovviamente non c'è solo ones: c'è fibs etc. Sono all'esercizio 3.79 dove con queste costruzioni si risolve un'equazione differenziale di 2° grado. Finora ho usato defparameter ma ho come l'impressione che crei un binding globale anziché locale(defmacro delay (expr) `(memo-proc (lambda () ,expr))) (defun force (delayed-object) (funcall delayed-object)) (defmacro cons-stream (head tail) `(cons ,head (delay ,tail))) (defun stream-car (stream) (car stream)) (defun stream-cdr (stream) (force (cdr stream)))
dove memo-proc è una funzione che "ricorda" il risultato se è stato precedentemente calcolato (con force)-
Re: lispari: letrecScritto daavvelentaniCubicolarioil 2009-03-03 20:52:00.0 alle 2009-03-03 20:52:00.0Trollate totali: 18184
- Scritto da:
>
> > > per le stream definite implicitamente: ho qui
> il
> > > belink
> > >
> > >
> >
> http://mitpress.mit.edu/sicp/full-text/book/book-Z
> >
> > secondo me puoi definire stream-cons in modo che
> > 'ones' non abbia bisogno di essere
> > definito.
>
> in quel caso specifico si ma cons-stream è
> definito in modo che il 'cdr' non sia valutato
> immediatamente (vedi sotto per i
> particolari).
Si`, lo so...
>
> Ovviamente non c'è solo ones: c'è fibs etc. Sono
> all'esercizio 3.79 dove con queste costruzioni si
> risolve un'equazione differenziale di 2° grado.
> Finora ho usato defparameter ma ho come
> l'impressione che crei un binding globale anziché
> locale
>
>> (defmacro delay (expr) > `(memo-proc (lambda () ,expr))) > > (defun force (delayed-object) > (funcall delayed-object)) > > (defmacro cons-stream (head tail) > `(cons ,head (delay ,tail))) > > (defun stream-car (stream) (car stream)) > (defun stream-cdr (stream) (force (cdr stream))) > >
>
> dove memo-proc è una funzione che "ricorda" il
> risultato se è stato precedentemente calcolato
> (con
> force)
No, al momento non mi viene in mente nessun altro modo di implementarlo...I think happiness is love
- Vladimir Putin
-
-
-
-
-
-
-
Re:WikipediaSalve ! perchè non aiuti wikipedia facendo per es. il patrollatore ? pensa al sapere ! sarà di tutti ! anche tu potrai usufruirne e grazie a te miglioreremo ! oppure puoi riempire di utili informazioni gli stub se hai nuove conoscenze ! ti ricordiamo di citare le fonti ! it.wikipedia.org aiutaci contiamo su di te
-