caveman2、ningle…Common LispのWeb周りのフレームワークを快適に使うためのたった1つのコト 2015-03-05 Lisp Common Lisp 小ネタ # caveman2、ningle、datafly…Common LispのWeb周りのフレームワークを快適に使うためのたった1つのコト ---------------------- Clack Meet Up #1 2015-03-05 @サムライト === ずっと俺のターン === # 問題 ------ Common Lispは case * Sensitive * Insensitive どっち? === # 問題 ------- あれ? ```lisp (eql? 'CaseInsensitive 'caseinsensitive) ;=> t ``` === # 問題 ------- リーダがデフォルトで大文字にするだけ ```lisp (eql? '|CaseSensitive| '|casesensitive|) ;=> nil ``` === # Caveman2 --------- ```lisp @route GET "/hello" (defun say-hello (&key (|name| "Guest")) (format nil "Hello, ~A" |name|)) ``` === # Ningle -------- ```lisp (setf (ningle:route *app* "/login" :method :POST) #'(lambda (params) (if (authorize (getf params :|username|) (getf params :|password|)) "Authorized!" "Failed...Try again."))) ``` === # 面倒… ---- デフォルトでそのままだたっらいいのに === # 魔法の`readtable-case` === # 魔法の`readtable-case` ----------------------- ```lisp (setf (readtable-case *readtable*) :invert) ``` を使えばOK 参考: [SBCLでclispとかallegroのmodern mode的なことをする - wasabizの日記](http://wasabiz.hatenablog.com/entry/20120929/1348889601) === # 例 ---- ```lisp CL-USER> :username :USERNAME CL-USER> (setf (readtable-case *readtable*) :invert) :invert CL-USER> :username :username ``` === # まとめ -------- * `(setf (readtable-case *readtable*) :invert)`を使うと快適だよ