2012年2月22日水曜日
Common Lispでのnamed-let
Common Lispにはnamed-letが無い.
そこでマクロの勉強がてらnamed-letを実装
(Schemeみたいにletって名前で統一はできませんでした…)
(defmacro named-let (name bind body)
`(labels ((,name ,(mapcar #'car bind) ,body))
(,name ,@(mapcar #'cadr bind))
))
アホみたいにバッククオートとアンクオートだけで挑戦してたので時間を無駄に書けてしまった.
「,@」….ちゃんとググれってことね…
Emacsでソースコードの折りたたみ
hs-minor-mode.elってのがデフォルトで含まれてるらしく,こいつを使えば簡単にソースコードを畳めるようになる.畳む範囲を柔軟に決めれる訳ではないが,ソースコードにタグを打つ必要が無いし,結局これが楽だと思う.
.emacsは以下の通りです.
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;;
;;; For folding
;;;
;; C coding style
(add-hook 'c-mode-hook
'(lambda ()
(hs-minor-mode 1)))
;; Scheme coding style
(add-hook 'scheme-mode-hook
'(lambda ()
(hs-minor-mode 1)))
;; Elisp coding style
(add-hook 'emacs-lisp-mode-hook
'(lambda ()
(hs-minor-mode 1)))
;; Lisp coding style
(add-hook 'lisp-mode-hook
'(lambda ()
(hs-minor-mode 1)))
;; Python coding style
(add-hook 'python-mode-hook
'(lambda ()
(hs-minor-mode 1)))
(define-key
global-map
(kbd "C-#") 'hs-toggle-hiding)
SBCL + Emacs(Meadow) + SLIME
Common Lispの設定でどハマりしたのでメモ
- SBCLのインストール.これについては何も迷う事はない. http://www.sbcl.org/platform-table.htmlからWindows用バイナリを取ってきてC:\SBCL\にインストール(SBCLのWindows版にある不具合については,とりあえず気にしない)
- Meadowのインストール.上に同じく迷うポイントは無いはず. http://www.meadowy.org/meadow/wiki/%E3%83%80%E3%82%A6%E3%83%B3%E3%83%AD%E3%83%BC%E3%83%89 から現行のsetup-ja.exeをとってきてC:\Meadow\にインストール
- SLIMEのインストール.これがどハマりポイント.2012/2/21現在のSLIMEにはバグがある模様.ロードバスが通ってるディレクトリ(例えば,~/.emacs.d/)の中でcvs -d :pserver:anonymous:anonymous@common-lisp.net:/project/slime/cvsroot co -D 2009-10-12 slimeを実行して古いヤツをもってくるのが楽.
- auto-complete.elとac-slime.elのインストール.これはWebを探して適当に持ってきたら良い.
- .emacsには以下を追加
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;;
;;; For Lisp (SBCL)
;;;
(setq inferior-lisp-program "C:/SBCL/sbcl.exe")
(add-to-list 'load-path "C:/cygwin/home/"username"/.emacs.d/slime")
(require 'slime)
(slime-setup)
(slime-setup '(slime-autodoc))
(slime-setup '(slime-repl))
(setq slime-net-coding-system 'utf-8-unix)
(add-hook 'inferior-lisp-mode-hook (lambda () (inferior-slime-mode t)))
(add-hook 'lisp-mode-hook (lambda ()
(slime-mode t)
(show-paren-mode)))
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;;
;;; For auto-complete
;;;
(add-to-list 'load-path "~/.emacs.d/")
(require 'auto-complete-config)
(add-to-list 'ac-dictionary-directories "~/.emacs.d//ac-dict")
(ac-config-default)
;; for slime
(require 'ac-slime)
(add-hook 'slime-mode-hook 'set-up-slime-ac)
(add-hook 'slime-repl-mode-hook 'set-up-slime-ac)
(define-globalized-minor-mode real-global-auto-complete-mode
auto-complete-mode (lambda ()
(if (not (minibufferp (current-buffer)))
(auto-complete-mode 1))))
(real-global-auto-complete-mode t)
こうやって書いてみると何てこと無いね.
これのために数時間無駄にしたと思うとダルくなるわ…
登録:
投稿 (Atom)