Mostra notizie nelle discussioni
  • Avatar
    Scritto da
    Non Autenticato
    il 2008-10-14 23:10:00.0 alle 2008-10-14 23:10:00.0
    domanda per sassofono/lispari
    voglio aggiungere un elemento alla fine di una lista nel modo più efficiente.

    Ho trovato questa:

    (nconc lst (cons elem nil))

    c'è di meglio? Newbie, inesperto
    • Avatar
      ☺
      Scritto da
      avvelentani
      Cubicolario
      il 2008-10-15 07:33:00.0 alle 2008-10-15 07:33:00.0
      Trollate totali: 18184
      Re: domanda per sassofono/lispari

      - Scritto da:
      > voglio aggiungere un elemento alla fine di una
      > lista nel modo più
      > efficiente.
      >
      > Ho trovato questa:
      >
      > (nconc lst (cons elem nil))
      >
      > c'è di meglio? Newbie, inesperto

      In generale no.

      Le liste del lisp sono semplici e attaccare un elemento in fondo e` un'operazione costosa.

      Nel caso particolare dipende:

      a) se puoi fallo con una combinazione di map/remove/reduce

      b) se puoi fallo con la macro LOOP

      c) l'idioma lisp per costruire una lista e` costriurla all'inverso (appendendo in cima) e nreverse alla fine.

      d) implementati una "deque":

      (defun make-deque (list) (cons list (last list)))
      
      (defun addone-deque (deque el) 
        (let ((n (list el)))
          (nconc (cdr deque) n)
          (setf (cdr deque) n)))
      


      (questo codice non gestisce il caso di liste vuote)
      I think happiness is love
      - Vladimir Putin
      • Avatar
        Scritto da
        Non Autenticato
        il 2008-10-15 08:37:00.0 alle 2008-10-15 08:37:00.0
        Re: domanda per sassofono/lispari

        - Scritto da: avvelentani
        >
        > - Scritto da:
        > > voglio aggiungere un elemento alla fine di una
        > > lista nel modo più
        > > efficiente.
        > >
        > > Ho trovato questa:
        > >
        > > (nconc lst (cons elem nil))
        > >
        > > c'è di meglio? Newbie, inesperto
        >
        > In generale no.
        >
        > Le liste del lisp sono semplici e attaccare un
        > elemento in fondo e` un'operazione costosa.
        >
        >
        > Nel caso particolare dipende:
        >
        > a) se puoi fallo con una combinazione di
        > map/remove/reduce
        >
        > b) se puoi fallo con la macro LOOP
        >
        > c) l'idioma lisp per costruire una lista e`
        > costriurla all'inverso (appendendo in cima) e
        > nreverse alla
        > fine.
        >
        > d) implementati una "deque":
        >
        >
        > (defun make-deque (list) (cons list (last list)))
        > 
        > (defun addone-deque (deque el) 
        >   (let ((n (list el)))
        >     (nconc (cdr deque) n)
        >     (setf (cdr deque) n)))
        > 

        >
        > (questo codice non gestisce il caso di liste
        > vuote)

        ok. bazzicando in internet ho trovato questa

        http://pastebin.com/m2f36c7c0

        magari stasera la adatterò al mio problema
        • Avatar
          ☺
          Scritto da
          avvelentani
          Cubicolario
          il 2008-10-15 09:01:00.0 alle 2008-10-15 09:01:00.0
          Trollate totali: 18184
          Re: domanda per sassofono/lispari

          - Scritto da:
          >
          > - Scritto da: avvelentani
          > >
          > > - Scritto da:
          > > > voglio aggiungere un elemento alla fine di una
          > > > lista nel modo più
          > > > efficiente.
          > > >
          > > > Ho trovato questa:
          > > >
          > > > (nconc lst (cons elem nil))
          > > >
          > > > c'è di meglio? Newbie, inesperto
          > >
          > > In generale no.
          > >
          > > Le liste del lisp sono semplici e attaccare un
          > > elemento in fondo e` un'operazione costosa.
          > >
          > >
          > > Nel caso particolare dipende:
          > >
          > > a) se puoi fallo con una combinazione di
          > > map/remove/reduce
          > >
          > > b) se puoi fallo con la macro LOOP
          > >
          > > c) l'idioma lisp per costruire una lista e`
          > > costriurla all'inverso (appendendo in cima) e
          > > nreverse alla
          > > fine.
          > >
          > > d) implementati una "deque":
          > >
          > >
          > > (defun make-deque (list) (cons list (last
          > list)))
          > > 
          > > (defun addone-deque (deque el) 
          > >   (let ((n (list el)))
          > >     (nconc (cdr deque) n)
          > >     (setf (cdr deque) n)))
          > > 

          > >
          > > (questo codice non gestisce il caso di liste
          > > vuote)
          >
          > ok. bazzicando in internet ho trovato questa
          >
          > http://pastebin.com/m2f36c7c0
          >
          > magari stasera la adatterò al mio problema

          Mi pare che faccia una cosa simile a quella che faccio io sopra (ammetto di aver dato un'occhiata molto veloce), usalo pure.
          I think happiness is love
          - Vladimir Putin
      • Avatar
        Scritto da
        Non Autenticato
        il 2008-10-15 08:41:00.0 alle 2008-10-15 08:41:00.0
        Re: domanda per sassofono/lispari

        - Scritto da: avvelentani
        >
        > - Scritto da:
        > > voglio aggiungere un elemento alla fine di una
        > > lista nel modo più
        > > efficiente.
        > >
        > > Ho trovato questa:
        > >
        > > (nconc lst (cons elem nil))
        > >
        > > c'è di meglio? Newbie, inesperto
        >
        > In generale no.
        >
        > Le liste del lisp sono semplici e attaccare un
        > elemento in fondo e` un'operazione costosa.
        >
        >
        > Nel caso particolare dipende:
        >
        > a) se puoi fallo con una combinazione di
        > map/remove/reduce
        >
        > b) se puoi fallo con la macro LOOP
        >
        > c) l'idioma lisp per costruire una lista e`
        > costriurla all'inverso (appendendo in cima) e
        > nreverse alla
        > fine.
        >
        > d) implementati una "deque":
        >
        >
        > (defun make-deque (list) (cons list (last list)))
        > 
        > (defun addone-deque (deque el) 
        >   (let ((n (list el)))
        >     (nconc (cdr deque) n)
        >     (setf (cdr deque) n)))
        > 

        >
        > (questo codice non gestisce il caso di liste
        > vuote)

        io adoro questo linguaggio A bocca aperta
<softv>

Pagina generata in 59 millisecondi

Utenti attivi: 15 nell'ultimo minuto, 38 negli ultimi cinque minuti, 90 negli ultimi 15 minuti