Upgrade to Pro — share decks privately, control downloads, hide ads and more …

今からはじめるScheme入門

Sponsored · Your Podcast. Everywhere. Effortlessly. Share. Educate. Inspire. Entertain. You do you. We'll handle the rest.
Avatar for ayato ayato
August 03, 2013

 今からはじめるScheme入門

Avatar for ayato

ayato

August 03, 2013
Tweet

More Decks by ayato

Other Decks in Programming

Transcript

  1. `̀(@ayato_p) (今日の主催者    The  Land  of  Lisp  =>  The  Town

     of  Lisp    Emacsが美しいから仕事したくない    だいたいプログラマ    最近ブログがScheme色な人    ハッシュタグは  #10LISP)
  2. (+ 3 8 ) 評価 (+ 3 (* 4 2))

    Lispの基本的なこと
  3. (+ 3 8 ) 評価 (+ 3 (* 4 2))

    Lispの基本的なこと
  4. (+ 3 8 ) 評価 (+ 3 (* 4 2))

    Lispの基本的なこと 評価
  5. (+ 3 8 ) 評価 (+ 3 (* 4 2))

    Lispの基本的なこと 評価 11
  6. 次の式をREPLで 確認してください (- 10 3) (- 100 43 5) (*

    9 3) (* 5 6 7) (/ 27 3) (/ 27 3 3) (/ 9 6) (exact->inexact (/ 31 2))
  7. REPLで確認しましょう (cons 1 2) (cons 1 ‘()) (cons 1 (cons

    2 (cons 3 ‘()))) (list 1 2 3) (car ‘(peanut butter and jelly)) (cdr ‘(peanut butter and jelly)) (car ‘(peanut))
  8. (lambda (n) (* n n)) lambda式は手続きを作ることができる ((lambda (n) (* n

    n)) 10) 下のように書けばそのまま使えます
  9. (define (fact n) (if (= n 1) 1 (* n

    (fact (- n 1))))) まずは一般形
  10. (define (fact n) (if (= n 1) 1 (* n

    (fact (- n 1))))) 停止条件 再帰呼び出し
  11. (fact 5) (* 5 (fact 4)) (* 5 (* 4

    (fact 3))) (* 5 (* 4 (* 3 (fact 2)))) (* 5 (* 4 (* 3 (* 2 (fact 1))))) (* 5 (* 4 (* 3 (* 2 1)))) 再帰のイメージ
  12. 末尾再帰 (define (fact n) (define (iter m ans) (if (=

    m 1) ans (iter (- m 1) (* ans m)))) (iter n 1))
  13. 名前付きlet版 (define (fact n) (let loop ((m n) (ans 1))

    (if (= m 1) ans (loop (- m 1) (* ans m)))))
  14. 高階関数の例 (map (lambda (x) (* x x)) '(1 2 3

    4 5)) lambdaで手続きをつくって渡している
  15. 高階関数の例 (filter (lambda (x) (< x 5)) '(1 2 3

    4 5 6 7 8 9 10)) lambdaで手続きをつくって渡している