Before LISPs Just Part of the Past #2 ~ Japanese symbols ~

3,702 views
3,681 views

Published on

0 Comments
2 Likes
Statistics
Notes
  • Be the first to comment

No Downloads
Views
Total views
3,702
On SlideShare
0
From Embeds
0
Number of Embeds
3,330
Actions
Shares
0
Downloads
4
Comments
0
Likes
2
Embeds 0
No embeds

No notes for slide

Before LISPs Just Part of the Past #2 ~ Japanese symbols ~

  1. 1. BeforeLispsJust Part of the Past~ #2 Japanese symbols ~
  2. 2. 注意!• 今日の話はすべてのCommon Lisp処理系で動くというわけではありません!• 以下の処理系では動きます– SBCL– CMUCL– CLISP• 是非他の処理系で試して報告してください
  3. 3. ある日のこと
  4. 4. !?日本語のシンボルは使えるらしい
  5. 5. そういえば…
  6. 6. もしmacro(defmacro もし(test then &optional else)`(if ,test ,then ,else))(defun 偶数? (n)(evenp n))* (もし (偶数? 10) ‘偶数! ‘奇数!)=> 偶数!
  7. 7. もしかしてリーダマクロも…?
  8. 8. 「 macro character(set-macro-character #「(lambda (strm c)(declare (ignore c))(funcall (get-macro-character #")strm #」)))(set-macro-character #」(get-macro-character #)))* 「こんにちは」=> “こんにちは”
  9. 9. ・回dispatch macro character(make-dispatch-macro-character #・ t)(set-dispatch-macro-character #・ #回(lambda (strm c n)(declare (ignore c))(let ((form (read strm t nil t))(counter (gensym)))`(dotimes (,counter ,n) ,form))))
  10. 10. ・回dispatch macro character* (let (lst)・3回(push ‘にゃん lst)lst)=> (にゃん にゃん にゃん)
  11. 11. 助詞を導入(set-macro-character #と(lambda (strm c)(declare (ignore strm))(intern (string c))))(set-macro-character #を(lambda (strm c)(declare (ignore strm))(intern (string c))))NON-TERMINATINGPをNIL(デフォルト)にすることで、字句解析をReaderに任せられる
  12. 12. ・。dispatch macro character(set-macro-character #・(lambda (strm c)(declare (ignore c))(destructuring-bind (op . args)(reverse (read-delimited-list #。 strm t))`(,op ,@(mapcan (lambda (x) `(,(car x) ,(cadr x)))(group args 2))))))* (read-from-string "・1と2を足す。")=> (足す ‘を 2 ‘と 1)
  13. 13. ・。dispatch macro character(defun 足す (&key ((と a)) ((を b)))(+ a b))* ・1と2を足す。=> 3* (let ((a 10) (b 20))・aをbと足す。)=> 30
  14. 14. 楽なのはここまで• 2文字以上からなる助詞はこの方法が使えないので、字句解析を自前でやる必要がある。CLでやる旨味の半分は字句解析をREADERに任せられることであり、その利点は失われる。• 字句解析を自分で書いても、変換先がS式なのでほかの言語で実装するよりは楽なはず
  15. 15. 最後にこのスライドは日本語プログラミングを推奨・応援するものではありません!ソースはASCII文字で書きましょう!

×