Programmeringuppgift 1

Funktionell programmering i Lisp

  1. Funktionen maxx[l], där l är en lista av minst en numeriska atomer, returnerar den största atomen i listan.

    Exempel
    (maxx '(3 2 1)) ==> 3
    (maxx '(1)) ==> 1

  2. Funktionen descending-p[l], där l är en lista av minst två numeriska atomer avgör om elementen i l är i strängt minskande ordning.

    Exempel
    (descending-p '(3 2 1)) ==> T
    (descendig-p '(3 1 2)) ==> NIL

  3. Funktionen reverse-all[l], där l är en lista, returnerar en lista som innehåller samma element som l, men i "motsatt" ordning. Även dellistor till l ska förändras på samma sätt.

    Exempel
    (reverse-all '(a b c)) ==> (c b a)
    (reverse-all '(a (b c) d e)) ==> (e d (c b) a)

  4. Definiera en funktion summa[l,m] där l och m är listor av tal. I m finns inga dubletter. Funktionen returnerar en lista, vars element kan vara antingen atomen NEJ eller listor av listor innehållande exakt 2 tal. Den returnerade listan är av samma längd som l. Både l och m innehåller minst ett tal vardera.

    Talparen (dvs listorna av längden 2) i den resulterande listan innehåller tal valda ur m. Summan av talen i varje par i dellistorna i den resulterande listan ska vara de respektive talen ur l. Om ett tal i l inte kan räknas fram av talen ur m ska i stället atomen NEJ vara med på denna plats i den resulterande listan. Talen ur m får användas flera gånger.

    Notera att om paret (x y) finns med i listan ska även (y x) finnas med. Ordningsföljder mellan element i listorna spelar ingen roll, utöver att ordningen mellan dellistorna i den resulterande listan ska överensstämma med l.

    Exempel
    (summa '(10 20 5 2) '(5 1 9)) ==> (((5 5) (1 9) (9 1)) NEJ NEJ ((1 1)))

Redovisning
För var och en av de fyra deluppgifterna ska du redovisa de steg som beskrivs i Kia Hööks Arbetsmetodik för små program. Du kan, om du vill, avstå från steg 5, abstrakt notation.

Dina lösningar ska spegla god programmeringssed för funktionella språk. Således kan fungerande program, som ej är en bild av ett funktionellt synsätt, komma att underkännas. Du bör speciellt undvika tekniker med "räknare" eller "ackumulerande parametrar", om dessa ej är nödvändiga för uppgiftslösningen.


  Anders Berglund			office	    + 46 (18) 471 31 67
  Information Technology		mobile	    + 46 (70) 425 02 11
  Department of Computer Systems        fax, dept   + 46 (18) 55 02 25
  P.O. Box 325				
  S-751 05 Uppsala			
  Sweden				
  e-mail: Anders.Berglund@docs.uu.se