Programmeringuppgift 1

Funktionell programmering i Lisp

Uppgift 1 - 3: Lös uppgifterna 19, 24 och 26 bland arbetsuppgifterna.

Uppgift 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.

Ledning: En möjlig representation för de komplexa talen är såsom en lista av tre element, en "tag" som avgör om listan representerar ett tal på rektangulär eller polär form samt de två talen.


Anders Berglund                        Office: Room 1254
Department of Computer Systems         E-mail: Anders.Berglund@docs.uu.se
Box 325                                Phone (work): +46 18 471 31 67
S-751 05 Uppsala                       Mobile phone: +46 70 582 45 80
Sweden                                 Fax (work):   +46 18 55 02 25