SlideShare a Scribd company logo
Lisp勉強会

2012.10.07@cafe?IKAGAWA DO
14: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基本関数

  car
cdr 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) → t

or
引数のどれかが t の時 t を返す
(or (eq ‘a ‘a ) (eq ‘a ‘b )) → t

cond
条件式
t…リスト、アトム、t
nil…それ以外
(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 … etc
2. カスタマイズファイルが必要
      ~/.emacs    ~/.xyzzy
3. デバッグが必要
         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が使えます。
この調子でどんどんカスタマイズし
ていってください。
気に入らない部分があれば
自分の手になじむように
カスタマイズ

More Related Content

PDF
研究会20140618:進捗と闇Pythonistaのワンライナーテクニックを少々
PDF
Material
PDF
Extensible Eff Applicative
PDF
Freer Monads, More Extensible Effects
ODP
Real World OCamlを読んでLispと協調してみた
PPTX
ヒカリノアトリエ演出「アバターと手から粒子」
PPTX
XMonad-oid on Emacs & More functional Emacs Lisp | 関数型LT大会
PDF
すごいHaskell 第7章 型や型クラスを自分で作ろう(後編)
研究会20140618:進捗と闇Pythonistaのワンライナーテクニックを少々
Material
Extensible Eff Applicative
Freer Monads, More Extensible Effects
Real World OCamlを読んでLispと協調してみた
ヒカリノアトリエ演出「アバターと手から粒子」
XMonad-oid on Emacs & More functional Emacs Lisp | 関数型LT大会
すごいHaskell 第7章 型や型クラスを自分で作ろう(後編)

What's hot (20)

KEY
Sml#探検隊
PPT
言語処理系入門€6
PDF
kollectionの紹介
PDF
関数型プログラミング入門 with OCaml
PDF
たのしい高階関数
ODP
F#とC#で見る関数志向プログラミング
PDF
PDF
これから Haskell を書くにあたって
PDF
Move semantics
PDF
関数プログラミング入門
PDF
PDF
Haskell超入門 Part.1
PDF
Swift 3 で新しくなったところ - 表面から見えにくいところを中心に紹介 #ISAOcorp
PDF
プログラミング言語のパラダイムシフトーScalaから見る関数型と並列性時代の幕開けー
PDF
Erlang で再帰
PDF
Haskell超初心者勉強会20
PDF
Hokuriku Scala 1
PPT
言語処理系入門4
PDF
モナドをつくろう
PDF
Fork/Join Framework。そしてLambdaへ。
Sml#探検隊
言語処理系入門€6
kollectionの紹介
関数型プログラミング入門 with OCaml
たのしい高階関数
F#とC#で見る関数志向プログラミング
これから Haskell を書くにあたって
Move semantics
関数プログラミング入門
Haskell超入門 Part.1
Swift 3 で新しくなったところ - 表面から見えにくいところを中心に紹介 #ISAOcorp
プログラミング言語のパラダイムシフトーScalaから見る関数型と並列性時代の幕開けー
Erlang で再帰
Haskell超初心者勉強会20
Hokuriku Scala 1
言語処理系入門4
モナドをつくろう
Fork/Join Framework。そしてLambdaへ。
Ad

Viewers also liked (7)

PDF
kitproライトニングトーク
PDF
暗黒美夢王とEmacs
PDF
Designing Teams for Emerging Challenges
PDF
UX, ethnography and possibilities: for Libraries, Museums and Archives
PDF
Visual Design with Data
PDF
3 Things Every Sales Team Needs to Be Thinking About in 2017
PDF
How to Become a Thought Leader in Your Niche
kitproライトニングトーク
暗黒美夢王とEmacs
Designing Teams for Emerging Challenges
UX, ethnography and possibilities: for Libraries, Museums and Archives
Visual Design with Data
3 Things Every Sales Team Needs to Be Thinking About in 2017
How to Become a Thought Leader in Your Niche
Ad

Similar to Lisp study (20)

PDF
Lisp tutorial for Pythonista : Day 2
PDF
Lisp Tutorial for Pythonista : Day 3
PDF
PythonでLispを実装した (evalつき)
ODP
括弧への異常な愛情 または私は如何にして心配するのを止めてCommon Lispを愛するようになったか
PDF
Lisp tutorial for Pythonista : Day 1
PDF
快適Emacs lisp生活を目指して
PPTX
(Lambdaだけで) 純LISPのような ナニかを作る
PDF
10分で分かるR言語入門ver2.1
PDF
M-expr
PDF
初めてのHaskell (表)
PPTX
Gaucheでマクロを書こう
PDF
Lispとは何なのか - 同図像性がもたらす力とその利用法
PDF
純LISPから考える関数型言語のプリミティブ: Clojure, Elixir, Haskell, Scala
PDF
10分で分かるR言語入門ver2_0906
PDF
プログラミングHaskell(第2章)
PDF
Elixirだ 第1回強化版 前半
ODP
Vim scriptとJavaとHaskell
PDF
Proof and Emacs
PDF
Haskell Lecture 1
PPTX
Ocaml lecture slides 01 at axsh
Lisp tutorial for Pythonista : Day 2
Lisp Tutorial for Pythonista : Day 3
PythonでLispを実装した (evalつき)
括弧への異常な愛情 または私は如何にして心配するのを止めてCommon Lispを愛するようになったか
Lisp tutorial for Pythonista : Day 1
快適Emacs lisp生活を目指して
(Lambdaだけで) 純LISPのような ナニかを作る
10分で分かるR言語入門ver2.1
M-expr
初めてのHaskell (表)
Gaucheでマクロを書こう
Lispとは何なのか - 同図像性がもたらす力とその利用法
純LISPから考える関数型言語のプリミティブ: Clojure, Elixir, Haskell, Scala
10分で分かるR言語入門ver2_0906
プログラミングHaskell(第2章)
Elixirだ 第1回強化版 前半
Vim scriptとJavaとHaskell
Proof and Emacs
Haskell Lecture 1
Ocaml lecture slides 01 at axsh

Lisp study