d. Haskell 旧資料 http://kaz.cyteen.nagoya-bunri.ac.jp/advprog2/haskell.html
関連資料 Haskell基礎文法最速マスター
課題 文字列の難読化 と 不要文字の除去
文字列 abcdefg に対し、 a.b.c.d.e.f.g. の様に1文字ずつ 記号を入れて区切るプログラムを作成する。
ヒント: ['.' ..] 無限リスト と、リスト操作関数 zip の利用など。
main = print $ zip "hello" ['.', '.' ..]main = print $ map (\x -> (fst x):(snd x):[]) $ zip "hello" ['.', '.' ..]main = print $ foldl (++) "" $ map (\x -> (fst x):(snd x):[]) $ zip "hello" ['.', '.' ..]main = print $ concat $ zipWith (\x y -> x:y:[]) "hello" (repeat '.')
e. LISP 旧資料 http://kaz.cyteen.nagoya-bunri.ac.jp/advprog2/lisp.html
・UEI shi3zの日記 これがプログラミングの神髄だ! ファイナルファンタジーのプログラマーが明かす秘密とLispトークバトル!
・On Lisp http://www.asahi-net.or.jp/~kc7k-nd/onlispjhtml/ Web私訳版
amazon On Lisp
演習内容概要:
・数値 整数(多倍長計算) 分数型
・クオート記号 '
・リスト
car cdr cadr ....
・cond 文
nil と '() の扱い
・lambda 式
(defun double (x) (* x 2))(double 2)((lambda (x) (* x 2)) 3)(mapcar #'(lambda (x) (+ x 10)) '(1 2 3))問題1: 2乗のリストを作成するは?・クロージャ
(defun make-adder (n) #'(lambda (x) (+ x n)))(setq add2 (make-addder 2))(setq add10 (make-adder 10))(funcall add2 1)(funcall add10 2)問題2: make-multi で掛け算バージョンを作成する。・末尾再帰
(defun our-length (lst) (if (null lst) 0 (1+ (our-length (cdr lst)))))(defun our-find-if (fn lst) (if (funcall fn (car lst)) (car lst) (our-find-if fn (cdr lst))))問題3: 上記の our-find-if を mapcar を利用して解決する。
・マクロ
バッククオート式(defun hello (x) (list 'Hey x))(hello 'koba)(defun greet (name)`(hello ,name))
(greet 'koba)
(defmacro greet (name)`(hello ,name))
(greet 'koba)
(defmacro greet (name)`(list 'hello ',name))
(greet koba)
問題4:
式を引数とし、その式を表示して、式の計算結果も表示するプログラムの作成。
(defmacro cl (x) `(progn (print ',x) ,x))
(cl (+ 1 2))
他の候補:
・Processing で generative CG
・github で コード管理
今年は諦め:
・MAX/MSP