Recover from microbel
This commit is contained in:
@@ -0,0 +1,3 @@
|
||||
# LISP 2010
|
||||
|
||||
Dette kurset ble holdt den 11. mars 2010 av Eirik Alderslyst Nygaard og Øystein Ingmar Skartsæterhagen
|
||||
BIN
Binary file not shown.
BIN
Binary file not shown.
BIN
Binary file not shown.
BIN
Binary file not shown.
BIN
Binary file not shown.
BIN
Binary file not shown.
@@ -0,0 +1,212 @@
|
||||
;;; Eksempelkode fra PVVs Lisp-kurs 11.03.2010.
|
||||
|
||||
;;; Skrevet av eirikald og oysteini.
|
||||
|
||||
;;; Se http://wiki.pvv.ntnu.no/pvv/Kurs/Lisp_1
|
||||
|
||||
;;; Denne filen inneholder alle funksjonsdefinisjonene fra kurset. Se
|
||||
;;; presentasjonen for beskrivelser og eksempler på anvendelse av
|
||||
;;; funksjonene.
|
||||
|
||||
;;; I SLIME kan du laste inn hele filen med C-c C-l eller
|
||||
;;; enkeltdefinisjoner med C-M-x. En advarsel om at variabelen _ er
|
||||
;;; ubrukt i funksjonen LEN* er forventet. For øvrig bør filen kunne
|
||||
;;; lastes inn uten problemer.
|
||||
|
||||
|
||||
|
||||
|
||||
;;; Del 1.
|
||||
|
||||
(defun square (x) (* x x))
|
||||
|
||||
(defun hypothenuse (side1 side2)
|
||||
(sqrt (+ (square side1) (square side2))))
|
||||
|
||||
(defun describe-number (n)
|
||||
(if (evenp n)
|
||||
"It is even!"
|
||||
"It is odd!"))
|
||||
|
||||
(defun ! (n)
|
||||
(if (= n 0)
|
||||
1
|
||||
(* n
|
||||
(! (- n 1)))))
|
||||
|
||||
(defun fib (n)
|
||||
(if (< n 2)
|
||||
1
|
||||
(+ (fib (- n 1))
|
||||
(fib (- n 2)))))
|
||||
|
||||
(defun elem (n list)
|
||||
(if (= n 0) ; hvis N er 0
|
||||
(first list) ; vil vi ha første element,
|
||||
(elem (- n 1) ; ellers vil vi ha (N-1)-te
|
||||
(rest list)))) ; fra resten av listen
|
||||
|
||||
(defun len (list)
|
||||
(if (null list) ; Hvis listen er tom
|
||||
0 ; er lengden 0,
|
||||
(+ 1 ; ellers er den 1 pluss
|
||||
(len ; lengden til
|
||||
(rest list))))) ; resten av listen.
|
||||
|
||||
(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.
|
||||
|
||||
(defun iota (a b)
|
||||
(if (> a b)
|
||||
nil
|
||||
(cons a
|
||||
(iota (+ a 1) b))))
|
||||
|
||||
(defun cat (list1 list2) ; meow
|
||||
(if (null list1)
|
||||
list2
|
||||
(cons (first list1)
|
||||
(cat (rest list1) list2))))
|
||||
|
||||
(defun insert (elem i list)
|
||||
(if (= i 0)
|
||||
(cons elem list)
|
||||
(cons (first list)
|
||||
(insert elem
|
||||
(- i 1)
|
||||
(rest list)))))
|
||||
|
||||
(defun collatz (n)
|
||||
(if (evenp n)
|
||||
(/ n 2)
|
||||
(1+ (* n 3))))
|
||||
|
||||
(defun collatz-length (n)
|
||||
(if (= n 1)
|
||||
0
|
||||
(+ 1 (collatz-length (collatz n)))))
|
||||
|
||||
|
||||
|
||||
|
||||
;;; Del 2.
|
||||
|
||||
(defun compose (f g)
|
||||
(lambda (x)
|
||||
(funcall f (funcall g x))))
|
||||
|
||||
(defun apply-over (fun list)
|
||||
(if (null list)
|
||||
nil
|
||||
(cons (funcall fun (first list))
|
||||
(apply-over fun (rest list)))))
|
||||
|
||||
(defun foldr (fun initial list)
|
||||
(if (null list)
|
||||
initial
|
||||
(funcall fun
|
||||
(first list)
|
||||
(foldr fun initial (rest list)))))
|
||||
|
||||
(defun !* (n)
|
||||
(foldr #'* 1 (iota 1 n)))
|
||||
|
||||
(defun len* (list)
|
||||
(foldr (lambda (_ l) (1+ l))
|
||||
0
|
||||
list))
|
||||
|
||||
(defun drop (n list)
|
||||
(if (= n 0)
|
||||
list
|
||||
(drop (- n 1) (rest list))))
|
||||
|
||||
(defun fact-tailrec (n acc)
|
||||
(if (= n 0)
|
||||
acc
|
||||
(fact-tailrec (- n 1) (* n acc))))
|
||||
|
||||
(defun fact (n)
|
||||
(fact-tailrec n 1))
|
||||
|
||||
(defun fib-rec (n i fibI fibI-1)
|
||||
(if (= i n)
|
||||
fibI
|
||||
(fib-rec n (1+ i)
|
||||
(+ fibI fibI-1) fibI)))
|
||||
|
||||
(defun fib* (n)
|
||||
(if (< n 2)
|
||||
1
|
||||
(fib-rec n 1 1 1)))
|
||||
|
||||
(defun fn-key (&key name (age 20))
|
||||
(list name age))
|
||||
|
||||
(defun fn-optional (&optional name (age 20))
|
||||
(list name age))
|
||||
|
||||
(defun fn-rest (mom &rest children)
|
||||
(list mom children))
|
||||
|
||||
(defun flip-append (list tail)
|
||||
(if (null list)
|
||||
tail
|
||||
(flip-append (rest list)
|
||||
(cons (first list) tail))))
|
||||
|
||||
(defun flip (list)
|
||||
(flip-append list nil))
|
||||
|
||||
(defun repeat (fun initial end &key (test #'eql))
|
||||
(if (funcall test initial end)
|
||||
(list end)
|
||||
(cons initial
|
||||
(repeat fun (funcall fun initial) end
|
||||
:test test))))
|
||||
|
||||
(defun collatz-list (n)
|
||||
(repeat #'collatz n 1))
|
||||
|
||||
|
||||
|
||||
|
||||
;;; Del 3.
|
||||
|
||||
(defun braid (list1 list2) ; merge
|
||||
(if (null list1)
|
||||
list2
|
||||
(if (null list2)
|
||||
list1
|
||||
(if (<= (first list1) (first list2))
|
||||
(cons (first list1)
|
||||
(braid (rest list1) list2))
|
||||
(cons (first list2)
|
||||
(braid list1 (rest list2)))))))
|
||||
|
||||
(defun braid* (list1 list2)
|
||||
(cond
|
||||
((null list1) list2)
|
||||
((null list2) list1)
|
||||
((<= (first list1) (first list2))
|
||||
(cons (first list1)
|
||||
(braid (rest list1) list2)))
|
||||
(t
|
||||
(cons (first list2)
|
||||
(braid list1 (rest list2))))))
|
||||
|
||||
(defun assoc-value (key alist &key (default nil))
|
||||
(let ((pair (assoc key alist)))
|
||||
(if pair
|
||||
(cdr pair)
|
||||
default)))
|
||||
|
||||
(defun prefix-to-infix (expr)
|
||||
(let ((func (first expr))
|
||||
(arg1 (second expr))
|
||||
(arg2 (third expr)))
|
||||
(list arg1 func arg2)))
|
||||
Binary file not shown.
|
After Width: | Height: | Size: 122 KiB |
Binary file not shown.
@@ -0,0 +1,75 @@
|
||||
\documentclass[a4paper,12pt]{article}
|
||||
\usepackage[norsk]{babel}
|
||||
\usepackage[utf8]{inputenc}
|
||||
\usepackage{graphicx}
|
||||
\usepackage{parskip}
|
||||
\usepackage{type1cm}
|
||||
|
||||
\setlength{\textwidth}{\paperwidth}
|
||||
\addtolength{\textwidth}{-2in}
|
||||
%%\setlength{\hoffset}{-1in}
|
||||
\setlength{\oddsidemargin}{0pt}
|
||||
\setlength{\marginparwidth}{0pt}
|
||||
|
||||
\setlength{\textheight}{\paperheight}
|
||||
\addtolength{\textheight}{-3cm}
|
||||
\setlength{\topmargin}{0pt}
|
||||
\setlength{\headheight}{0pt}
|
||||
\setlength{\headsep}{0pt}
|
||||
\setlength{\voffset}{-1in}
|
||||
\addtolength{\voffset}{1.5cm}
|
||||
|
||||
\newcommand{\BIG}{\fontsize{250}{55}\selectfont}
|
||||
|
||||
\begin{document}
|
||||
\thispagestyle{empty}
|
||||
|
||||
\begin{center}
|
||||
{\LARGE \textit{Programvareverkstedet arrangerer kurs i}}\\
|
||||
\vspace{6mm}
|
||||
{\BIG Lisp}
|
||||
\end{center}
|
||||
\vspace{-8mm}
|
||||
{\large Torsdag \textbf{11. mars} kl. \textbf{18:15} i \textbf{KJL5}}
|
||||
\vspace{2mm}\\
|
||||
{\large Kursholdere:
|
||||
\begin{minipage}[t]{12cm}
|
||||
\textbf{Eirik Alderslyst Nygaard} og\\\textbf{Øystein Ingmar Skartsæterhagen}
|
||||
\end{minipage}
|
||||
}
|
||||
|
||||
%\large
|
||||
|
||||
%%\vspace{8mm}
|
||||
|
||||
\vspace{-6mm}
|
||||
\includegraphics[width=\textwidth]{lisplogo_alien_bw}
|
||||
|
||||
\vspace{4mm}
|
||||
|
||||
Dette kurset er en introduksjon til Common Lisp for nybegynnere. Vi
|
||||
vil ta for oss
|
||||
|
||||
\begin{itemize}
|
||||
\item Litt Lisp-historie
|
||||
\item Lister
|
||||
\item Funksjoner
|
||||
\item Spesielle operatorer
|
||||
\item Funksjonell og imperativ programmering
|
||||
\end{itemize}
|
||||
|
||||
\vspace{4mm}
|
||||
|
||||
\textit{Varighet}: Ca. 2--3 timer\\
|
||||
\textit{Anbefalte forkunnskaper}:
|
||||
\begin{minipage}[t]{10cm}
|
||||
Noe programmeringserfaring i andre språk.\\
|
||||
Ingen kjennskap til Lisp forutsettes.
|
||||
\end{minipage}
|
||||
|
||||
|
||||
%% \begin{center}
|
||||
%% \includegraphics[width=8cm]{PVV-logo}
|
||||
%% \end{center}
|
||||
|
||||
\end{document}
|
||||
Reference in New Issue
Block a user