括弧への異常な愛情 または私は如何にして心配するのを止めてcommon...

Download 括弧への異常な愛情 または私は如何にして心配するのを止めてCommon Lispを愛するようになったか

If you can't read please download the document

Upload: m2ym

Post on 25-May-2015

5.260 views

Category:

Technology


3 download

TRANSCRIPT

  • 1. Common Lisp Shibuya.lisp #7

2. 1. 2. Lisp 3. Lisp 4. Lisp 5.Lisp 6. Lisper's Delight 3. 1. @m 2ymhttp://cx4a.org/ GNU Emacs auto-complete.el, popwin.el, popup.el, mongo.el, rsense, gccsense, xkeyremap, etc 4. 1. 2002 C 2003 Visual Basic 6 2003 2008 C++ 2006 GNU Emacs 2007 2010 Java 2007 Emacs Lisp 2009 Ruby 2010 OCaml, Haskell, Common Lisp Lisp 5. 2. Lisp 6. 2. Lisp Beating the Averages (Paul Graham), Revenge of the Nerds (Paul Graham), How to Become a Hacker (Eric Raymond), Let Over Lambda (Doug Hoyte), etc 7. 2. Lisp 8. 2. Lisp 9. 2. Lisp Common Lisp Scheme 10. 2. Lisp Lisp Lisp 11. 2. Lisp Emacs Lisp C Lisp 12. 3. Lisp 13. 3. Lisp Ruby on RailsPylons Common Lisp 14. 4. Lisp 15. 4. Lisp a. b. c.intern d.export 16. 4. Lisp a. use-packageimport (defpackage foobar (:use :cl :alexandria)) (defpackage foobar (:use :cl) (:import-from :alexandria ...)) 17. 4. Lisp b. Haskell, OCaml, Python -- Haskell - import qualified Data.Map as M ;; Common Lisp - (defpackage foobar (:use :cl) (:rename :alexandria :alex)) 18. 4. Lisp b. use-package (* OCaml *) let open List in rev (map (fun x -> succ x) [1; 2; 3]) ;; Common Lisp (with-use-package :alexandria (plist-alist (remove-from-plist '(:a 1 :b 2) :a)) 19. 4. Lisp c.intern defpackageintern ;; *package* = cl-user (defpackage foobar (:use *my-varaible* :my-function)) cl-userfoobar*my-variable*keywordmy-functionintern (defpackage #:foobar; (:use #:*my-varaible* #:my-function)) 20. 4. Lisp d.export export ;;:export (defpackage foobar (:use :cl) (:export :foo :bar ...)) Clojuredefn/defn-Goexport 21. 4. Lisp d.export cl-annot@ CL-USER> '@1+ 2 (1+ 2) CL-USER> '@export (defun foo () ...) (progn (export 'foo) (defun foo () ...)) 22. 4. Lisp CLOS ofprefixkeyword 23. 4. Lisp CLOS ;; of (defclass person () ((name :accessor name-of) (age:accessor age-of))) (name-of bob) => Bob (age-of bob) => 42 24. 4. Lisp CLOS ;; prefix (defclass person () ((name :accessor person-name) (age:accessor person-age))) (person-name bob) => Bob (person-age bob) => 42 25. 4. Lisp CLOS ;; keyword (defclass person () ((name :accessor :name) (age:accessor :age))) (:name bob) => Bob (:age bob) => 42 keyword 26. 4. Lisp multiple-value-bind multiple-value-bind (multiple-value-bind (a b) (values 1 2) (multiple-value-bind (c d) (values 3 4) (+ a b c d))) 27. 4. Lisp multiple-value-bind metabang-bind (metabang-bind:bind ((values a b) (values 1 2)) (values c d) (values 3 4))) (+ a b c d)) 28. 4. Lisp metabang-bindcl-patternMLcl-pattern cl-adt (match '(Bob 42) ((list Alice 30) :alice-30) ((list Alice 40) :alice-40) ((list Bob30) :bob-30) ((list Bob42) :bob-42)) 29. 4. Lisp loop loopcl-loop-plus (defun vectorize (seq &optional (element-type '*)) (coerce seq `(vector ,element-type))) (loop for i from 0 below 100 by 2 collect i transform #'vectorize) cl-astloopiterate 30. 4. Lisp (find-if (lambda (x) (= (length x) 2)) seq) Clojurecl-anonfun (find-if #%(= (length %) 2) seq) 31. 4. Lisp (defview index () (markup (:html (:body (:h1 Hello, World)))) defview 32. 4. Lisp cl-annot @view (defun index () ...) ;; caveman @url GET / (defun index (params) ...) 33. 4. Lisp memoize clacheload-time-valuecl-annot ;; (defmacro with-cache (key &body body) (once-only (key) (with-gensyms (cache) `(let ((,cache (load-time-value (make-hash-table :test 'equal)))) (or (gethash ,key ,cache) (setf (gethash ,key ,cache) (locally ,@body))))))) 34. 4. Lisp (defun fact (x) (with-cache x (if (