世界のナベアツにGaucheで挑戦する

Loading...

Flash Player 9 (or above) is needed to view presentations.
We have detected that you do not have it on your computer. To install it, go here.

0 comments

Post a comment

    Post a comment
    Embed Video
    Edit your comment Cancel

    1 Favorite

    世界のナベアツにGaucheで挑戦する - Presentation Transcript

    1. 世界のナベアツに Gauche で挑戦する 日本野望の会 総裁 吉田 茂 a.k.a. yshigeru
    2. アナタは誰ですか?
      • 姓は「吉田」、名は「茂」
      • またの名を yshigeru
      • 日本野望の会総裁
      • シルクハッター
      • 好きな Lisp:Scheme
      • 好きな処理系 :Gauche ( ver. 0.5 くらいから使ってます)
      • Lisp 以外の関心事: ACE 、 TAO 、 OpenDDS
      • やんごとなき事情により目下ニート生活中
    3. 言っておきますが… Q. ご本人ですか ? A. 違います
    4. 言っておきますが… Q. 若き日の思い出 ? A. 違います
    5. 言っておきますが… Q. ご親戚の方ですか ? A. 違います
    6. 吉田茂 でございます。
    7. さて、
    8. 本日の野望 VS 世界のナベアツ氏 世界のナベアツに Gauche で挑戦したい !!
    9. ナベアツ問題   1 から 40 まで数えて、 3 の倍数と 3 がつく数字のときだけアホになるプログラムを作成せよ。 問題: FizzBuzz 問題はもう古い!
    10. ((((1 から 40) ' まで数えて 3 の倍数 ' と 3 がつく数字 ' の時だけ ) ' アホに ) ' なります ) 分析 1 から 40 まで数えて、 3 の倍数と 3 がつく数字のときだけアホになります。 ((((((((1 から 40) ' まで数えて 3 の倍数 ' と 3 がつく数字 ' の時だけ ) ' アホに ) ' なって 5 の倍数 ' の時だけ ) ' 犬っぽく ) ' なって 8 の倍数 ' の時だけ ) ' 気持ちよく ) ' なります ) 1 から 40 まで数えて、 3 の倍数と 3 がつく数字のときだけアホになって、 5 の倍数のときだけ犬っぽくなって、 8 の倍数のときだけ気持ちよくなります。
    11. (( ( (1 から 40) ' まで数えて 3 の倍数 ' と 3 がつく数字 ' の時だけ ) ' アホに ) ' なります ) 分析 1から40まで数えて、3の倍数と3がつく数字のときだけアホになります。 ((((((( (1 から 40) 'まで数えて 3 の倍数 'と 3 がつく数字 'の時だけ) 'アホに) 'なって 5 の倍数 'の時だけ) '犬っぽく) 'なって 8 の倍数 'の時だけ) '気持ちよく) ' なります ) 1から40まで数えて、3の倍数と3がつく数字のときだけアホになって、5の倍数のときだけ犬っぽくなって、8の倍数のときだけ気持ちよくなります。 最初は (1 から n) 出だしは「 (1 から n) 」 最後は「 ' なります」 最後は「 ' なります」
    12. ((((1 から 40) ' まで数えて 3 の倍数 ' と 3 がつく数字 ' の時だけ ) ' アホに ) ' なります ) 分析 1 から 40 まで数えて、 3 の倍数と 3 がつく数字のときだけアホになります。 ((((((((1 から 40) ' まで数えて 3 の倍数 ' と 3 がつく数字 ' の時だけ ) ' アホに ) ' なって 5 の倍数 ' の時だけ ) ' 犬っぽく ) ' なって 8 の倍数 ' の時だけ ) ' 気持ちよく ) ' なります ) 1 から 40 まで数えて、 3 の倍数と 3 がつく数字のときだけアホになって、 5 の倍数のときだけ犬っぽくなって、 8 の倍数のときだけ気持ちよくなります。 「 ' まで数えて」、「 ' なって」の後は条件 「 ' まで数えて」、「 ' なって」の後は条件 条件は「と」でつながることもある
    13. ((((1 から 40) ' まで数えて 3 の倍数 ' と 3 がつく数字 ' の時だけ ) ' アホに ) ' なります ) 分析 1 から 40 まで数えて、 3 の倍数と 3 がつく数字のときだけアホになります。 ((((((((1 から 40) ' まで数えて 3 の倍数 ' と 3 がつく数字 ' の時だけ ) ' アホに ) ' なって 5 の倍数 ' の時だけ ) ' 犬っぽく ) ' なって 8 の倍数 ' の時だけ ) ' 気持ちよく ) ' なります ) 1 から 40 まで数えて、 3 の倍数と 3 がつく数字のときだけアホになって、 5 の倍数のときだけ犬っぽくなって、 8 の倍数のときだけ気持ちよくなります。 条件の後は、動作を表す 「 ' アホに」、「 ' 犬っぽく」、「 ' 気持ちよく」 条件の後は、動作を表す 「 ' アホに」、「 ' 犬っぽく」、「 ' 気持ちよく」
    14. ソースコード
      • (define (1 から n)
      • (let ((numbers (iota n 1))
      • (preds '())
      • (actions '()))
      • (define (dispatch msg . args)
      • (case msg
      • (( まで数えて なって ) (push! preds (apply まで数えて args)))
      • (( アホに ) (push! actions アホに ))
      • (( 犬っぽく ) (push! actions 犬っぽく ))
      • (( 気持ちよく ) (push! actions 気持ちよく ))
      • (( なります ) ( なります numbers (reverse preds) (reverse actions))))
      • dispatch)
      • dispatch))
      ナベアツ関数発動!! 条件を生成 して登録 動作を登録
    15. ソースコード
      • (define ( の倍数 x)
      • (lambda (n)
      • (= (remainder n x) 0)))
      • (define ( がつく数字 x)
      • (let ((test (string->regexp (number->string x))))
      • (lambda (n)
      • (test (number->string n)))))
      • (define ( と func1 func2)
      • (lambda (n)
      • (or (func1 n) (func2 n))))
      • (define ( まで数えて n func adj . rest)
      • (if (eq? adj ' の時だけ )
      • (func n)
      • ( と (func n) ( まで数えて (list-ref rest 0)
      • (list-ref rest 1)
      • (list-ref rest 2)
      • (list-tail rest 3)))))
      条件関数 条件の連結 条件の生成
    16. ソースコード
      • (define ( アホに str)
      • (let ((chars (string->list str)))
      • (list->string (append (list (car chars) # 〜 ) (cdr chars)))))
      • (define ( 犬っぽく str)
      • (string-append str " バフッ "))
      • (define ( 気持ちよく str)
      • (cond ((#/ な $/ str) (string-append str " ぁ〜〜ッ "))
      • ((#/[ ちに ]$/ str) (string-append str " ぃ〜〜ッ "))
      • ((#/[ くうッ ]$/ str) (string-append str " ぅ〜〜ッ "))
      • ((#/ ご $/ str) (string-append str " ぉ〜〜ッ "))
      • (else (string-append str " 〜〜ッ "))))
      動作を表す関数 アホになったり、犬っぽくなったり、気持ちよくなったり 文字列の変換を行う。
    17. ソースコード
      • (define ( なります numbers preds actions)
      • (define (apply-action n preds actions result applied?)
      • (cond ((null? preds) (values result applied?))
      • (((car preds) n)
      • (apply-action n (cdr preds) (cdr actions) ((car actions) result) #t))
      • (else
      • (apply-action n (cdr preds) (cdr actions) result applied?))))
      • (for-each (lambda (n)
      • (call-with-values (lambda ()
      • (apply-action n preds actions ( 読み n) #f))
      • (lambda (result applied?)
      • (print (if applied? result (number->string n))))))
      • numbers))
      ナベアツ関数の本丸 数列に条件関数を適用し、真ならば、動作関数を適用する
    18. ソースコード
      • (define ( 読み n)
      • (let (( 数 '("" " いち " " に " " さん " " よん " " ご " " ろく " " なな " " はち " " きゅう "))
      • ( 桁 '("" " じゅう " " ひゃく " " せん ")))
      • (let loop ((digits (map digit->integer (string->list (number->string n)))))
      • (if (null? digits)
      • ""
      • (string-append (if (and (= (car digits) 1)
      • (> (length digits) 1))
      • ""
      • (list-ref 数 (car digits)))
      • (list-ref 桁 (- (length digits) 1))
      • (loop (cdr digits)))))))
      数をひらがな表記に変換する
    19. 実演
    20. 次回はあらびき団で お会いしましょう! ご清聴ありがとうございました

    + yshigeruyshigeru, 2 years ago

    custom

    1628 views, 1 favs, 0 embeds more stats

    More info about this document

    © All Rights Reserved

    Go to text version

    • Total Views 1628
      • 1628 on SlideShare
      • 0 from embeds
    • Comments 0
    • Favorites 1
    • Downloads 1
    Most viewed embeds

    more

    All embeds

    less

    Flagged as inappropriate Flag as inappropriate
    Flag as inappropriate

    Select your reason for flagging this presentation as inappropriate. If needed, use the feedback form to let us know more details.

    Cancel
    File a copyright complaint
    Having problems? Go to our helpdesk?

    Categories