• Share
  • Email
  • Embed
  • Like
  • Save
  • Private Content
Lisp study
 

Lisp study

on

  • 1,415 views

 

Statistics

Views

Total Views
1,415
Views on SlideShare
1,235
Embed Views
180

Actions

Likes
3
Downloads
3
Comments
1

4 Embeds 180

http://u-moa.info 159
https://twitter.com 10
http://u-moa.sakura.ne.jp 9
https://si0.twimg.com 2

Accessibility

Categories

Upload Details

Uploaded via as Adobe PDF

Usage Rights

© All Rights Reserved

Report content

Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate.

Cancel

11 of 1 previous next

  • Full Name Full Name Comment goes here.
    Are you sure you want to
    Your message goes here
    Processing…
  • 重なっている部分があったのでちょっと修正しました。
    Are you sure you want to
    Your message goes here
    Processing…
Post Comment
Edit your comment

    Lisp study Lisp study Presentation Transcript

    • Lisp勉強会2012.10.07@cafe?IKAGAWA DO14:00~17:00
    • ( 始める前に注意点 ( Lispそこまで詳しくない ) ( 途中いきつまる可能性がある ) ) → みんなで教え合って解決していきたい
    • 準備• Emacs もしくは xyzzy のインストール できてますか?
    • 勉強会の流れ
    • Lispの考え方 Lispの文法 Lispの演習 Emacs,xyzzy カスタマイズ
    • Lisp 考え方
    • Lispの二大重要単語 リスト (list)リストとは括弧で 括ったもの アトム例 (atom) (emacs vim xyzzy) ("睦月" "如月" "弥生" "卯月")
    • リストの中にあるものがアトム コレ アトム例 (atom) (emacs vim xyzzy) ("睦月" "如月" "弥生" "卯月")
    • ((emacs) vim xyzzy)これは、アトムですこれは、リストの中にリストがあると考える
    • S式リスト アトム(list) (atom)
    • Lisp 文法 +演習
    • 基本 リストで括って作る。Lispの由来 「List Programing」
    • プログラミング言語なので関数を利用していきます。
    • (関数名 引数1 引数2 …) 関数以外のものは シングルクォーテーションを例 つける。(car ‘(a b)) 関数 car
    • 関数を入れ子構造で書いて使っていく。(関数2 (関数1 引数1 引数2 …))※使う関数が増えると括弧が複雑になるので注意
    • Lisp基本関数 carcdr cons
    • car 関数の紹介(car ‘(helloworld goodbyeworld world))を動かしてみてください① scratchバッファを選んで プログラムを入力② ctrl J プログラム入力直後のこの 位置にカーソルを置く!
    • car関数(helloworld goodbyeworld world) 先頭要素を取り出す関数 helloworld
    • 演習問題先ほどの演習をもとに次のリストからAppleを取り出してください。((Apple) Banana Orange)※注意点リストの先頭にシングルクォーテーションを付ける。実行は ctrl J です。
    • • 回答(car (car ‘((Apple) Banana Orange)))
    • cdr関数の紹介演習 (cdr ‘((Apple) Banana Orange)) を動かしてみてください carの残りをリストで返す (Banana Orange)
    • 演習問題これまでの演習をもとに次のリストからBananaもしくは(Banana)を取り出してください。((Apple Banana) Orange)※注意点リストの先頭にシングルクォーテーションを付ける。実行は ctrl J です。
    • • 回答(car (cdr (car ((Apple Banana) Orange))))(cdr (car ((Apple Banana) Orange)))
    • setq関数の紹介(car (cdr (car ((Apple Banana) Orange))))…だんだんと長くなってきて読みにくい。そうだ!変数宣言だ。(setq x ((Apple Banana) Orange))(car (cdr (car x)))
    • cons関数の紹介 演習 (cons ‘a ‘((Apple) Banana Orange)) を動かしてみてください一つ目の引数アトムを先頭に 加えたリストを返す (a (Apple) Banana Orange) ※注意点 (cons atom list) のように一つ目の引数をアトム 二つ目の引数をリストとする。
    • 演習問題事前に(setq s ‘Apple)(setq l ‘(Banana (Orange Grape)))として、変数宣言してください。これまでに紹介した関数 「car」「cdr」「cons」を用いて、上で宣言した二つの変数から、(Apple Orange)というリストを返すプログラムを作ってください。
    • • 回答(setq s Apple)(setq l (Banana (Orenge Grape)))(cons s (cdr (car (cdr l))))
    • 条件式関係の関数などの紹介 cond t null or eq nil
    • eq引数二つが同じものか確かめる関数(eq ‘a ‘a) → tor引数のどれかが t の時 t を返す(or (eq ‘a ‘a ) (eq ‘a ‘b )) → tcond条件式
    • t…リスト、アトム、tnil…それ以外(eq ‘a ‘b)nil
    • cond関数の紹介① (setq l ‘(Apple Banana Orenge))② (setq l ‘(Banana Orenge))③ (setq l ‘(Orenge Banana))(cond ((eq (car l) ‘Apple) t) ①の時 t を返す! ((eq (car l) ‘Banana) (car l)) ②の時 Bananaを返す! (t nil)) ③の時 nil を返す! C言語のswitch-Case文でいうdefault文
    • 関数を作る関数の紹介defun関数(defun 関数名 (引数) 処理)
    • 例car関数の動きをするfirster関数を作る※リストの一番目の要素を取り出す関数(defun firster (l) (car l))
    • 問題リストの2番目の要素を取り出す関数「seconder」を作ってください!(defun 関数名 (引数) 処理)
    • • 回答(defun seconder (l) (car (cdr l)))
    • null関数の紹介• null関数はリストが空の時 t を返す(null ‘())• 加えて、nilが引数の時 t を返す(null nil)
    • • 再起関数を作ろう!
    • 問題一つ目の引数アトムが二つ目の引数リストにある場合t を返す関数member1を作ってください 。 S…’apple l…’(apple banana orange)(defun member1 (s l) の時はtを返す null…リストが空の時 t (cond ((null l) nil) (t (or (eq (car l) s) (member1 s (cdr l)) ))))
    • 問題先ほど解説した関数member1を改造してmember1がtのとき、aをのぞいたリストを返す関数member2を作ってみてください。もしできたら今夜のプレゼンナイトでソースレビューもしてみてください。
    • Emacs , xyzzy のカスタマイズ
    • カスタマイズに必要なこと1. 豊富なEmacs,xyzzy関数を扱うことが必要 define-key beginning-of-buffer … etc2. カスタマイズファイルが必要 ~/.emacs ~/.xyzzy3. デバッグが必要 scratchバッファを使う
    • キーボードの設定必要な関数 global-set-keyキーを設定する関数(global-set-key "¥C-h" delete-backward-char)もしうまく動かなかったら(define-key global-map (kbd "C-h") delete-backward-char)
    • エディタを開いた状態で ctrl x を押してください そのあとに F を押してくださいパスは関係ないとして、上のようにパスとファイル名.xyzzyもしくは、.emacsと書いてください。
    • • さきほどscratchに書いたキーボードの設定を .xyzzy、.emacsに書いておくことで 次回からC-hでbackspaceが使えます。
    • この調子でどんどんカスタマイズしていってください。
    • 気に入らない部分があれば自分の手になじむようにカスタマイズ