Answer-ID
  • Întrebări
  • Tag-uri
  • Categorii
Notificări
Recompense
Înregistrare
După înregistrare, veți primi notificări despre răspunsurile și comentariile la întrebările DVS.
Logare
Dacă aveţi deja un cont, autentificaţi-vă pentru a verifica notificările noi.
Aici vor fi recompensele pentru întrebările, răspunsurile și comentariile adăugate sau modificate.
Mai mult
Sursă
Editează
 troelskn
troelskn

Cum pot adăuga la un sistem alist în schemă?

Adăugarea unui element în capul unui alist (lista asociativă) este suficient de simplă:

> (cons '(ding . 53) '((foo . 42) (bar . 27)))
((ding . 53) (foo . 42) (bar . 27))

Adăugarea la coada unui alist este un pic mai complicat totuși. După unele experimentări, am produs acest lucru:

> (define (alist-append alist pair) `(,@alist ,pair))
> (alist-append '((foo . 42) (bar . 27)) '(ding . 53))
'((foo . 42) (bar . 27) (ding . 53))

Totuși, mi se pare că aceasta nu este soluția idiomatică. Deci, cum se procedează de obicei în schemă? Sau este chiar așa?

5 2008-09-18T19:54:09+00:00 1
Programare
list
lisp
scheme
associative
Comentarii la întrebare (0)
Utilizator anonim
19 septembrie 2008 в 12:21
2008-09-19T00:21:08+00:00
Mai mult
Sursă
Editează
#96477

Nu adăugați la o listă. Vă aflați pe o listă.

O listă a este un set logic de asociații. Nu vă interesează ordinea elementelor dintr-un set. Tot ce vă interesează este prezența sau absența unui anumit element. În cazul unei liste a, tot ce vă interesează este dacă există o asociere pentru o anumită etichetă (adică o pereche a cărei CAR este valoarea specificată) și, având în vedere asocierea, valoarea asociată (adică în această punerea în aplicare, CDR a perechii).

0
0
Comentarii (0)
Matthias Benkard
19 septembrie 2008 в 12:45
2008-09-19T00:45:37+00:00
Mai mult
Sursă
Editează
#96754

Common Lisp definește o funcție numită ACONS exact în acest scop, unde

(acons key value alist)

este echivalent cu:

(cons (cons key value) alist)

Acest lucru sugerează că simpla constatare a unui alist este idiomatică. Rețineți că aceasta înseamnă două lucruri:

  1. Deoarece căutările sunt efectuate de obicei din față în spate, asociațiile recent adăugate au prioritate față de cele vechi. Acest lucru poate fi folosit pentru o implementare naivă a ambelor medii lexicale și dinamice.
  2. În timp ce se află pe o listă este O (1), adăugarea este în general O (n) unde n este lungimea listei, astfel încât utilizarea idiomatică este cea mai bună pentru performanță și este preferabil stilistic.
0
0
Comentarii (0)
Adăugati o întrebare
Categorii
Toate
Tehnologii
Cultură
Viață / Artă
Stiință
Profesii
Afaceri
RU
© Answer-ID 2021
Sursă
https://stackoverflow.com
în cadrul licenței cc by-sa 3.0 cu atribuire