Göm menyn

Del F: Iterativa konstruktioner

Exempel F1

Skriv en funktion vänd som vänder på en lista. Använd dig av någon av Common Lisps iterativa konstruktioner (t.ex. loop, do). Du ska givetvis inte används den inbyggda funktionen reverse. Exempel:

  CL-USER(9): (vänd '(a b c d))
  (D C B A)

Se svar

Exempel F2

Skriv en variant av vänd från exempel F1 som kan vända på alla nivåer, dvs även underlistor. Gör det utan att använda rekursion! Exempel:

  CL-USER(12): (vänd-alla '(a (b c) d (e (f g)) h))
  (H ((G F) E) D (C B) A)

Se svar

Exempel F3

Skriv en funktion finns-tal? som tar reda på om det finns minst ett element i en rak lista som är ett tal. Funktionen ska använda sig av some för att utföra upprepningen.

Se svar

Exempel F4

Skriv en iterativ funktion summera-listor som summerar elementen i två lika långa raka listor. Elementen ska summeras parvis och en ny lista med summorna ska returneras. Exempel:

  CL-USER(14): (summera-listor '(1 2 3) '(10 22 11))
  (11 24 14)

Se svar

Exempel F5

Skriv en iterativ funktion palindrom? som kontrollerar om en sträng är ett palindrom (dvs om den är likadan oavsett om man läser framifrån eller bakifrån). Du kan använda funktionen length för att ta reda på längden av en sträng samt funktionen (char sträng n) för att hämta ut tecken n ur strängen. Första tecknet i strängen har position 0. Exempel:

  CL-USER(50): (palindrom? "anna")
  T
  CL-USER(51): (palindrom? "1991")
  T
  CL-USER(52): (palindrom? "annas")
  NIL

Se svar


Sidansvarig: Peter Dalenius
Senast uppdaterad: 2004-11-08