Google Groups no longer supports new Usenet posts or subscriptions. Historical content remains viewable.
Dismiss

Fjerne element frå liste - returnere element

8 views
Skip to first unread message

Asbjørn Sæbø

unread,
Jan 27, 2011, 5:03:03 PM1/27/11
to

Eg prøvar å lage ein funksjon som tek ut eit element frå ei liste,
fjernar elementet frå lista og returnerar elementet.
No har eg komme så langt at eg greier å returnere elementet, men lista
har eg ikkje fått forandra.

(defun deal-card (deck)
"Remove a random card from the deck and return it"
; Must both return the card and remove it from the deck
(let ((card (car (nthcdr (random (length deck)) deck)) ))
(setq deck (remove card deck))
card))

Kan nokon hjelpe meg med dette?

Asbjørn

--
A: Because it messes up the order in which people normally read text.
Q: Why is top-posting such a bad thing?
A: Top-posting.
Q: What is the most annoying thing on usenet and in e-mail?

Espen Vestre

unread,
Jan 26, 2011, 5:15:43 PM1/26/11
to
Asbj�rn S�b� <as...@stud.ntnu.no> writes:

> (setq deck (remove card deck))

Feilen med dette er at du her bare lager en lokal binding i
funksjonen. I den funksjonen (eller i den eval-loopen) hvor du sendte
med "deck" som en parameter til funksjonen din, har ingenting endret
seg.

Dersom du �nsker at funskjonen din skal ha en destruktiv sideeffekt p�
listestrukturen, m� du bruke funksjoner som faktisk gj�r destruktive
lokale endringer i listens struktur, f.eks.:

(setf (cdr liste-som-har-card-som-andre-element)
(cddr liste-som-har-card-som-andre-element))

- men du vil fortsatt ikke ha en god l�sning siden du ikke kan fjerne
f�rste element i lista (ser du hvorfor?).
--
(espen)

Jon Haugsand

unread,
Jan 28, 2011, 12:59:07 PM1/28/11
to
Espen Vestre <es...@vestre.net> writes:

>
> Dersom du �nsker at funskjonen din skal ha en destruktiv sideeffekt p�
> listestrukturen, m� du bruke funksjoner som faktisk gj�r destruktive
> lokale endringer i listens struktur, f.eks.:
>
> (setf (cdr liste-som-har-card-som-andre-element)
> (cddr liste-som-har-card-som-andre-element))
>
> - men du vil fortsatt ikke ha en god l�sning siden du ikke kan fjerne
> f�rste element i lista (ser du hvorfor?).

Han kan evt lage en makro. Men det virker som han tenker litt feil,
dvs pr�ver � programmere veldig tilstandsorientert i et mer
funksjonelt milj�. Is�fall ville jeg kanskje representert lista i et
objekt eller en struct.

/Jon

Espen Vestre

unread,
Jan 28, 2011, 2:24:00 PM1/28/11
to
Jon Haugsand <jon...@ifi.uio.no> writes:

> Han kan evt lage en makro. Men det virker som han tenker litt feil,

> dvs prøver å programmere veldig tilstandsorientert i et mer
> funksjonelt miljø. Isåfall ville jeg kanskje representert lista i et
> objekt eller en struct.

Jeg hadde ikke så lyst til å komme med for konkrete ideer, så OP fikk
anledning til å tenke dette ut selv :-), men jeg ville gjort det samme
som deg, hatt en eller annen "pakning" rundt lista. Skal man gjøre det
veldig funksjonelt, vil løsningen være å bruke multiple
verdier. F.eks. rett og slett ved å bytte ut returverdien card med
(values card deck).
--
(espen)

0 new messages