第6回の宿題やらなきゃ!
勝手に宿題やってみる
ttp://web.sfc.keio.ac.jp/~aihara/lisp06/hiki.cgi?%C2%E86%B2%F3%BD%C9%C2%EA
課題1
(defun average (ls) (let ((sum 0)) (dolist (x ls (/ sum (length ls))) (setq sum (+ sum x)) ))) (average '(282 299 282 286 291 295 283 280)) ->1149/4
課題2
;;データ (setq data '((Jan . 50) (Feb . 30) (Mar . 55) (Apr . 98) (May . 120) (Jun . 100) (Jul . 80) (Aug . 18) (Sep . 70) (Oct . 105) (Nov . 85) (Dec . 170) ))
2.1
>(mapcar #'(lambda (x) (print (cdr x))) data) ;;以下出力 50 30 55 98 120 100 80 18 70 105 85 170 (50 30 55 98 120 100 80 18 70 105 85 170)
2.2
>(sort data #'> :key #'cdr) ((Dec . 170) (May . 120) (Oct . 105) (Jun . 100) (Apr . 98) (Nov . 85) (Jul . 80) (Sep . 70) (Mar . 55) (Jan . 50) (Feb . 30) (Aug . 18))
2.3
>(apply #'+ (mapcar #'cdr data)) 981
課題3
クラスを使ってるっぽい(?)けどCLOSは知らないので勝手に構造体でGO
;;データ (defstruct book v1 v2 v3) (setf books (list (make-book :v1 '(Kaze no Uta wo kike) :v2 '(Murakami haruki) :v3 '(novel)) (make-book :v1 '(Mezon Ikkoku) :v2 '(Takahashi Rumiko) :v3 '(comics)) (make-book :v1 '(Izu no Odoriko) :v2 '(Kawabata Yasunuari) :v3 '(novel)) (make-book :v1 '(Common Lisp) :v2 '(Guy L Steele) :v3 '(technical lisp)) (make-book :v1 '(Tom Sawyer) :v2 '(Mark Twain) :v3 '(novel) )))
3.1
(defun list-authors (ls) (labels ((rec (s acc) (cond ((endp s) (reverse acc)) (t (rec (cdr s) (cons (book-v1 (car s)) acc)) )))) (rec ls nil) )) >(list-authors books) ((Kaze no Uta wo kike) (Mezon Ikkoku) (Izu no Odoriko) (Common Lisp) (Tom Sawyer)) ;;別解 >(mapcan #'(lambda (x) (list (book-v1 x))) books) ((Kaze no Uta wo kike) (Mezon Ikkoku) (Izu no Odoriko) (Common Lisp) (Tom Sawyer))
3.2
(defun list-novel-books (ls) (let ((novelp #'(lambda (x) (eq 'novel (car (book-v3 x)))))) (labels ((rec (s acc) (cond ((endp s) (reverse acc)) (t (rec (cdr s) (if (funcall novelp (car s)) (cons (car s) acc) acc) ))))) (rec ls nil) ))) >(list-novel-books books) (#S(book v1 (Kaze no Uta wo kike) v2 (Murakami haruki) v3 (novel)) #S(book v1 (Izu no Odoriko) v2 (Kawabata Yasunuari) v3 (novel)) #S(book v1 (Tom Sawyer) v2 (Mark Twain) v3 (novel))) ;;別解 >(mapcan #'(lambda (x) (if (eq 'novel (car (book-v3 x))) (list x))) books) (#S(book v1 (Kaze no Uta wo kike) v2 (Murakami haruki) v3 (novel)) #S(book v1 (Izu no Odoriko) v2 (Kawabata Yasunuari) v3 (novel)) #S(book v1 (Tom Sawyer) v2 (Mark Twain) v3 (novel)))
課題4
(defun do-length (ls) (do ((i 0 (1+ i))) ((null (nth i ls)) i) )) >(setq test '(1 2 3 4 5 6)) >(do-length test) 6
doの記憶が曖昧になっててちょっと苦戦した
課題5
(defun nth-loop (ls) (let ((r 0)) (loop for x in ls count r) )))
xyzzyだとloopが完璧に実装されていない(?)ようなのでCLISPで書いた。
Common Lispのloopってこんなに色んな書き方があったのか!
loopについてもっと勉強しないと。
課題6
パス
先生終わりました!