lisp study

46
Lisp勉強会 2012.10.07@cafe?IKAGAWA DO 14:00~17:00

Upload: taichi-kimura

Post on 25-May-2015

1.593 views

Category:

Technology


3 download

TRANSCRIPT

Page 1: Lisp study

Lisp勉強会 2012.10.07@cafe?IKAGAWA DO

14:00~17:00

Page 2: Lisp study

( 始める前に注意点

( Lispそこまで詳しくない )

( 途中いきつまる可能性がある )

)

→ みんなで教え合って解決していきたい

Page 3: Lisp study

準備

• Emacs もしくは xyzzy のインストール

できてますか?

Page 4: Lisp study

勉強会の流れ

Page 5: Lisp study

Lispの考え方

Lispの文法 Lispの演習

Emacs,xyzzy カスタマイズ

Page 6: Lisp study

Lisp 考え方

Page 7: Lisp study

Lispの二大重要単語

リストとは括弧で

括ったもの

(emacs vim xyzzy)

("睦月" "如月" "弥生" "卯月")

アトム (atom)

リスト

(list)

Page 8: Lisp study

リストの中にあるものがアトム

(emacs vim xyzzy)

("睦月" "如月" "弥生" "卯月")

コレ アトム (atom)

Page 9: Lisp study

((emacs) vim xyzzy)

これは、リストの中にリストがあると考える

これは、アトムです

Page 10: Lisp study

S式

アトム (atom)

リスト

(list)

Page 11: Lisp study

Lisp 文法 +演習

Page 12: Lisp study

基本 リストで括って作る。

Lispの由来

「List Programing」

Page 13: Lisp study

プログラミング言語なので関数を利用していきます。

Page 14: Lisp study

(関数名 引数1 引数2 …)

(car ‘(a b))

関数 car

関数以外のものは シングルクォーテーションを つける。

Page 15: Lisp study

関数を入れ子構造で書いて使っていく。

(関数2 (関数1 引数1 引数2 …))

※使う関数が増えると括弧が複雑になるので注意

Page 16: Lisp study

Lisp基本関数

cdr car

cons

Page 17: Lisp study

car 関数の紹介

(car ‘(helloworld goodbyeworld world))

を動かしてみてください

scratchバッファを選んで プログラムを入力

ctrl J プログラム入力直後のこの位置にカーソルを置く!

Page 18: Lisp study

car関数

(helloworld goodbyeworld world)

先頭要素を取り出す関数

helloworld

Page 19: Lisp study

演習問題

先ほどの演習をもとに次のリストから

Appleを取り出してください。

((Apple) Banana Orange)

※注意点

リストの先頭にシングルクォーテーションを付ける。

実行は です。

ctrl J

Page 20: Lisp study

• 回答

(car (car ‘((Apple) Banana Orange)))

Page 21: Lisp study

cdr関数の紹介

演習

(cdr ‘((Apple) Banana Orange))

を動かしてみてください

carの残りをリストで返す

(Banana Orange)

Page 22: Lisp study

演習問題

これまでの演習をもとに次のリストから

Bananaもしくは(Banana)を取り出してください。

((Apple Banana) Orange)

※注意点

リストの先頭にシングルクォーテーションを付ける。

実行は です。

ctrl J

Page 23: Lisp study

• 回答

(car (cdr (car '((Apple Banana) Orange))))

(cdr (car '((Apple Banana) Orange)))

Page 24: Lisp study

setq関数の紹介

(car (cdr (car '((Apple Banana) Orange))))

…だんだんと長くなってきて読みにくい。

そうだ!変数宣言だ。

(setq x '((Apple Banana) Orange))

(car (cdr (car x)))

Page 25: Lisp study

cons関数の紹介

演習

(cons ‘a ‘((Apple) Banana Orange))

を動かしてみてください

一つ目の引数アトムを先頭に

加えたリストを返す

(a (Apple) Banana Orange)

※注意点

(cons atom list) のように一つ目の引数をアトム

二つ目の引数をリストとする。

Page 26: Lisp study

演習問題 事前に (setq s ‘Apple) (setq l ‘(Banana (Orange Grape))) として、変数宣言してください。

これまでに紹介した関数 「car」「cdr」「cons」 を用いて、上で宣言した二つの変数から、 (Apple Orange) というリストを返すプログラムを作ってください。

Page 27: Lisp study

• 回答

(setq s 'Apple)

(setq l '(Banana (Orenge Grape)))

(cons s (cdr (car (cdr l))))

Page 28: Lisp study

条件式関係の関数などの紹介

or

cond

eq

t nil

null

Page 29: Lisp study

eq 引数二つが同じものか確かめる関数

(eq ‘a ‘a) → t

or 引数のどれかが t の時 t を返す

(or (eq ‘a ‘a ) (eq ‘a ‘b )) → t

cond

条件式

Page 30: Lisp study

t…リスト、アトム、t

nil…それ以外

(eq ‘a ‘b)

nil

Page 31: Lisp study

① (setq l ‘(Apple Banana Orenge))

② (setq l ‘(Banana Orenge))

③ (setq l ‘(Orenge Banana))

(cond

((eq (car l) ‘Apple) t)

((eq (car l) ‘Banana) (car l))

(t nil))

cond関数の紹介

C言語のswitch-Case文でいうdefault文

①の時 t を返す!

②の時 Bananaを返す!

③の時 nil を返す!

Page 32: Lisp study

関数を作る関数の紹介

(defun 関数名 (引数)

処理

)

defun関数

Page 33: Lisp study

car関数の動きをするfirster関数を作る

※リストの一番目の要素を取り出す関数

(defun firster (l)

(car l)

)

Page 34: Lisp study

問題

リストの2番目の要素を取り出す関数「seconder」を作ってください!

(defun 関数名 (引数)

処理

)

Page 35: Lisp study

• 回答

(defun seconder (l)

(car (cdr l))

)

Page 36: Lisp study

null関数の紹介

• null関数はリストが空の時 t を返す

(null ‘())

• 加えて、nilが引数の時 t を返す

(null nil)

Page 37: Lisp study

•再起関数を作ろう!

Page 38: Lisp study

問題

一つ目の引数アトムが

二つ目の引数リストにある場合t を返す関数

member1を作ってください 。

(defun member1 (s l)

(cond

((null l) nil)

(t (or (eq (car l) s)

))))

(member1 s (cdr l))

S…’apple l…’(apple banana orange) の時はtを返す null…リストが空の時 t

Page 39: Lisp study

問題

先ほど解説した関数member1を改造して

member1がtのとき、aをのぞいたリストを返す関数member2を作ってみてください。

もしできたら

今夜のプレゼンナイトで

ソースレビューもしてみてください。

Page 40: Lisp study

Emacs , xyzzy の

カスタマイズ

Page 41: Lisp study

カスタマイズに必要なこと

1. 豊富なEmacs,xyzzy関数を扱うことが必要

2. カスタマイズファイルが必要

3. デバッグが必要

~/.emacs ~/.xyzzy

define-key beginning-of-buffer … etc

scratchバッファを使う

Page 42: Lisp study

キーボードの設定

必要な関数

global-set-key

キーを設定する関数

(global-set-key "¥C-h" 'delete-backward-char)

もしうまく動かなかったら

(define-key global-map (kbd "C-h")

'delete-backward-char)

Page 43: Lisp study

ctrl x を押してください

エディタを開いた状態で

そのあとに を押してください F

パスは関係ないとして、上のようにパスと ファイル名 .xyzzyもしくは、.emacsと書いてください。

Page 44: Lisp study

• さきほどscratchに書いたキーボードの設定を

.xyzzy、.emacsに書いておくことで

次回からC-hでbackspaceが使えます。

Page 45: Lisp study

この調子でどんどんカスタマイズしていってください。

Page 46: Lisp study

気に入らない部分があれば 自分の手になじむように カスタマイズ