Mostra notizie nelle discussioni
  • Avatar
    Scritto da
    Non Autenticato
    il 2009-03-03 19:54:00.0 alle 2009-03-03 19:54:00.0
    lispari: letrec
    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...
    • Avatar
      ☺
      Scritto da
      il 2009-03-03 19:55:00.0 alle 2009-03-03 19:55:00.0
      Trollate totali: 5005
      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'dAnonimo
      • Avatar
        ☺
        Scritto da
        avvelentani
        Cubicolario
        il 2009-03-03 20:28:00.0 alle 2009-03-03 20:28:00.0
        Trollate totali: 18184
        Re: lispari: letrec

        - 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'dAnonimo

        Rotola dal ridere
        I think happiness is love
        - Vladimir Putin
    • Avatar
      Scritto da
      Non Autenticato
      il 2009-03-03 20:04:00.0 alle 2009-03-03 20:04:00.0
      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)
      >       `(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...
      • Avatar
        Scritto da
        Non Autenticato
        il 2009-03-03 20:18:00.0 alle 2009-03-03 20:18:00.0
        Re: lispari: letrec

        > >
        > > 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))
        
        • Avatar
          ☺
          Scritto da
          avvelentani
          Cubicolario
          il 2009-03-03 20:26:00.0 alle 2009-03-03 20:26:00.0
          Trollate totali: 18184
          Re: lispari: letrec

          - 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
          • Avatar
            Scritto da
            Non Autenticato
            il 2009-03-03 20:33:00.0 alle 2009-03-03 20:33:00.0
            Re: lispari: letrec

            - 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...
            • Avatar
              ☺
              Scritto da
              avvelentani
              Cubicolario
              il 2009-03-03 20:41:00.0 alle 2009-03-03 20:41:00.0
              Trollate totali: 18184
              Re: lispari: letrec

              - 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
              • Avatar
                Scritto da
                Non Autenticato
                il 2009-03-03 20:47:00.0 alle 2009-03-03 20:47:00.0
                Re: lispari: letrec

                > > 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)
                • Avatar
                  ☺
                  Scritto da
                  avvelentani
                  Cubicolario
                  il 2009-03-03 20:52:00.0 alle 2009-03-03 20:52:00.0
                  Trollate totali: 18184
                  Re: lispari: letrec

                  - 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
    • Avatar
      ☺
      Scritto da
      il 2009-03-03 22:12:00.0 alle 2009-03-03 22:12:00.0
      Trollate totali: 33
      Re:Wikipedia
      Salve ! 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
<softv>

Pagina generata in 79 millisecondi

Utenti attivi: 9 nell'ultimo minuto, 22 negli ultimi cinque minuti, 48 negli ultimi 15 minuti