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

今からはじめるScheme入門

ayato
August 03, 2013

 今からはじめるScheme入門

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で手続きをつくって渡している