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