Hatena::Groupcadr

わだばLisperになる このページをアンテナに追加 RSSフィード

2004 | 12 |
2005 | 01 | 02 | 07 | 10 | 11 |
2006 | 06 | 07 | 08 | 09 | 10 | 11 | 12 |
2007 | 01 | 02 | 03 | 04 | 05 | 06 | 07 | 08 | 09 | 10 | 11 | 12 |
2008 | 01 | 02 | 03 | 04 | 05 | 06 | 07 | 08 | 09 | 10 | 11 | 12 |
2009 | 01 | 02 | 03 | 04 | 05 | 06 | 07 | 08 | 09 | 10 | 11 | 12 |
2010 | 01 | 02 | 03 | 04 | 05 | 06 | 07 | 08 | 09 | 10 | 11 | 12 |
2011 | 01 | 02 | 03 | 04 | 05 | 06 | 07 | 11 |

2010-06-28

AUTO-IMPORT

| 22:33 | AUTO-IMPORT - わだばLisperになる を含むブックマーク はてなブックマーク - AUTO-IMPORT - わだばLisperになる

GITHUB-INSTALL便利だし紹介したい!と思って前回のエントリーを書いたのですが、前々回に既に紹介してましたw

あんまりなので、同じく昨日位に作ってみたAUTO-IMPORTを紹介してみます。

TAO/SILENTの論文を読んでパッケージ・パスというアイデアが便利そうだったので、中途半端に真似てみました。

もっと本格的に真似られれば結構便利な気がしますが、下記のコードくらいでも普段の作業では割と便利です。

(DEFPARAMETER *PACKAGE-PATH* 
  (LIST :SHIBUYA.LISP 
        :FARE-UTILS 
        :ALEXANDRIA
        :MYCL-UTIL
        :KMRCL
        :METATILITIES
        ))

(DEFUN AUTO-IMPORT (NAME &AUX ANS)
  (DOLIST (PKG (REVERSE *PACKAGE-PATH*))
    (WHEN (AND (FIND-PACKAGE PKG)
               (FIND-SYMBOL (STRING NAME) PKG))
      (LET ((SYM (INTERN (STRING NAME) PKG)))
        (SHADOWING-IMPORT SYM)
        (PUSH PKG ANS))))
  ANS)
;; FLATTENが欲しい
(AUTO-IMPORT :FLATTEN)
;⇒ (:SHIBUYA.LISP :ALEXANDRIA :MYCL-UTIL :KMRCL)

(FLATTEN '(1 2 3 4 5 (1 2 (3 (4 ((((5)6))))))))
;⇒ (1 2 3 4 5 1 2 3 4 5 6)

(SYMBOL-PACKAGE 'FLATTEN)
;⇒ #<PACKAGE "SHIBUYA.LISP">

GITHUB-INSTALL

| 22:28 | GITHUB-INSTALL - わだばLisperになる を含むブックマーク はてなブックマーク - GITHUB-INSTALL - わだばLisperになる

なんということもないユーティリティですが、結構便利に使える気がします!

(DEFUN GITHUB-INSTALL (USER-NAME NAME)
  (ASDF-INSTALL:INSTALL
   (FORMAT NIL
           "http://github.com/~A/~A/tarball/master"
           USER-NAME
           NAME)))

使用例:

joachifmさんのcl-mechanizeを導入してみる

(GITHUB-INSTALL "joachifm" "cl-mechanize")
Install where?
1) System-wide install: 
   System in /share/sys/cl/asdf/
   Files in /share/sys/cl/src/ 
2) Personal installation: 
   System in /home/mc/doritos-ubuntu/.sbcl/systems/
   Files in /home/mc/doritos-ubuntu/.sbcl/site/ 
 --> 1
Downloading 3174 bytes from http://download.github.com/joachifm-cl-mechanize-68567a0.tar.gz ...
Installing /home/mc/master.asdf-install-tmp in /share/sys/cl/src/,/share/sys/cl/asdf/
joachifm-cl-mechanize-68567a0/
joachifm-cl-mechanize-68567a0/COPYING
joachifm-cl-mechanize-68567a0/README.md
joachifm-cl-mechanize-68567a0/cl-mechanize.asd
joachifm-cl-mechanize-68567a0/cl-mechanize.lisp
joachifm-cl-mechanize-68567a0/packages.lisp
;; GPGのチェックに答える
; loading system definition from /share/sys/cl/asdf/cl-mechanize.asd into
; #<PACKAGE "ASDF0">
; registering #<SYSTEM :CL-MECHANIZE {100DF3D0E1}> as CL-MECHANIZE
NIL

(GITHUB-INSTALL "joachifm/cl-mechanize")

という形式を受け付けるようにしても良いかもしれません。