commit 8865897aeda543e143a3f8f5277f0fc9de190bc4
Author: Kursmester <kurs@pvv.ntnu.no>
Date:   Wed Mar 5 11:50:11 2025 +0100

    Recover from microbel

diff --git a/README.md b/README.md
new file mode 100644
index 0000000..3d6aa8b
--- /dev/null
+++ b/README.md
@@ -0,0 +1,3 @@
+# LISP 2012
+
+Dette kurset ble holdt den 25. oktober 2012 av Øystein Skartsæterhagen
diff --git a/kode.lisp b/kode.lisp
new file mode 100644
index 0000000..62874d1
--- /dev/null
+++ b/kode.lisp
@@ -0,0 +1,212 @@
+;;; Kode fra PVVs Lisp-kurs 2012-10-25.
+
+;;; Vi leker litt med REPL-en
+
+245
+(+ 6 15)
+(+ 3 5 24 72)
+(* 3 4)
+(- 20 14)
+(+ (* 3 4) (- 20 14))
+(sqrt 16)
+(sqrt 34)
+
+;;; Vi lager nye funksjoner
+
+(defun square (x) (* x x))
+
+;;; En større funksjon
+
+(defun hypothenuse (side1 side2)
+  (sqrt (+ (square side1) (square side2))))
+
+;;; IF og tester
+
+(defun gjett (tall)
+  (if (= tall 42)
+      "riktig"
+      "galt"))
+
+;;; Eksempel: Fakultet
+
+(defun factorial (n)
+  (if (= n 0)
+      1
+      (* n
+         (factorial (- n 1)))))
+
+;;; Eksempel: Fibonacci
+
+(defun fib (n)
+  (if (< n 2)
+      1
+      (+ (fib (- n 1))
+         (fib (- n 2)))))
+
+;;; Lister
+
+(list 1 2 3)
+(list 24)
+(list (list 3 5 7) (list 2 3))
+(list)
+
+;;; Sitering
+
+(+ 4 38)
+'(+ 4 38)
+pi
+'pi
+
+;;; Formatert utskrift
+
+(format t "Svaret er ~A.  (Men hva er spørsmålet?)~%"
+        42)
+
+(format t "Noen objekter: ~A, ~A, ~A.~%"
+        '(a b c)
+        50
+        "foobar")
+
+;;; Lokale variabler: LET
+
+(let ((x 17)
+      (y 38))
+  (list x y (+ x y) (* x y)))
+
+;;; Endring av variabler: SETF
+
+(let ((x 3)
+      (y 5))
+  (format t "~A = ~A, ~A = ~A~%"
+          'x x 'y y)
+  (setf x (+ x y))
+  (setf y (list 1 2 3))
+  (format t "~A = ~A, ~A = ~A~%"
+          'x x 'y y))
+
+;;; Spesielle variabler
+
+(defvar *foo* 42)
+
+(defun print-foo ()
+  (format t "foo = ~A~%" *foo*))
+
+(defun dostuff ()
+  (let ((*foo* 0))
+    (print-foo)
+    (setf *foo* 5)
+    (print-foo))
+  (print-foo))
+
+;;; Mer om SETF
+
+(defvar *the-list* (list 'foo 'bar 'baz))
+(setf (first *the-list*) 'flaff)
+
+;;; Vi plukker lister fra hverandre ...
+
+(first '(a b c d))
+(rest '(a b c d))
+(first (rest '(a b c d)))
+(first (rest (rest '(a b c d))))
+
+;;; ... og setter dem sammen igjen
+
+(defvar *list* (list 'a 'b 'c 'd))
+(cons (first *list*) (rest *list*))
+
+;;; Den tomme listen: NIL
+
+(cons 'foo nil)
+(cons 'foo (cons 'bar nil))
+
+;;; Funksjonen NULL
+
+(null nil)
+(null '(a b c))
+
+;;; Eksempel: Sum av en liste med tall
+
+(defun sum (list)
+  (if (null list)          ; Hvis listen er tom
+      0                    ; er dens sum 0,
+      (+ (first list)      ; ellers første tall pluss
+         (sum              ; summen av
+          (rest list)))))  ; resten av listen.
+
+;;; Eksempel: Kvadratene av alle tall i en liste
+
+(defun list-of-squares (numbers)
+  (if (null numbers)
+      nil
+      (cons (square (first numbers))
+            (list-of-squares (rest numbers)))))
+
+;;; En for-løkke
+
+(loop
+  for i from 1 to 10
+  do (format t "~A~%" i))
+
+;;; En while-løkke
+
+(let ((x 1))
+  (loop
+     while (> x 0)
+     do (format t "Square root: ~A~%" (sqrt x))
+     do (format t "New value:~%")
+     do (setf x (parse-integer (read-line)))))
+
+;;; En do-while-løkke
+
+(loop
+  do (format t "Continue?~%")
+  while (string= (read-line) "yes"))
+
+;;; En foreach-løkke
+
+(loop
+  for x in '(foo bar baz quux)
+  do (format t "Element: ~A~%" x))
+
+;;; Kombinasjon av flere typer løkker
+
+(loop
+  for i from 0
+  for x in '(foo bar baz quux stop-here moo moo moo)
+  while (not (eq x 'stop-here))
+  do (format t "Element ~A: ~A~%" i x))
+
+;;; Oppsamling av verdier
+
+(defun iota (n)
+  (loop
+     for i from 0 to n
+     collect i))
+
+;;; Betingelser
+
+(defun divisors (n)
+  (loop
+     for i from 1 to n
+     if (= (mod n i) 0)
+     collect i))
+
+;;; Høyereordens funksjoner
+
+(sort (list 5 2 17 8 9 24 12) #'<)
+(sort (list 5 2 17 8 9 24 12) #'>)
+
+;;; MAPCAR
+
+(mapcar #'square (list 4 9 32))
+
+;;; REMOVE-IF
+
+(remove-if #'symbolp '(a 5 b 32 c 4))
+
+(mapcar #'square (remove-if #'symbolp '(a 5 b 32 c 4)))
+
+;;; Anonyme funksjoner: LAMBDA
+
+(mapcar (lambda (x) (list x (sqrt x))) (list 16 24 56))
diff --git a/lispkurs.pdf b/lispkurs.pdf
new file mode 100644
index 0000000..87d6c8f
Binary files /dev/null and b/lispkurs.pdf differ
diff --git a/plakat-lisp.pdf b/plakat-lisp.pdf
new file mode 100644
index 0000000..cea2519
Binary files /dev/null and b/plakat-lisp.pdf differ