Re[3]: Metaprogramming et al
От: CrazyPit  
Дата: 12.07.05 13:52
Оценка: 4 (2)
Здравствуйте, Сергей Туленцев, Вы писали:

СТ>Здравствуйте, CrazyPit, Вы писали:


CP>>Да интересная дискуссия, даже зарегился на RSDN, чтоб сюда запостить.

CP>>С Лиспом я знаком года 2-3, с тех пор как плотно начал юзать емакс, но именно CL, ну и схемой, заинтересовался только в конце прошлого года. Сначала прочитал, правда не до конца, первый том "Мир Лиспа", как то мне не очень понравилось и я забил, так что не советую вам её читать, очень скучно плюс только в том, что про Common Lisp это единственная книга на русском. Потом, когда появилась в инете Practical Common Lisp, и я его прочитал, да ещё открыл для себя SLIME, всё стало намного интереснее. Язык ИМХО самый навороченный из всех, и причина этому именно макросы в сочетании с простым представлением программ и данных. Чего стоят те же макросы loop & format.

СТ>Заинтересованный, я полез в инет и добыл: emacs-21.3, slime-1.2.1, Allegro CL 6.2, clisp-2.33.2

СТ>Пытался подружить парочку emacs + slim. Максимум, что мне удалось, это вызов консоли Аллегро по M-x slime. Но, думаю, эффект должен быть немного другой. Не поделишься ли опытом настройки?

Ну вопервых при редактировании лиспа должен стоять slime-mode(M-x slime-mode) у меня это автоматически настроено. Потом лучше чтобы был отключен ILisp, но у тебя он скорее всего не установлен.
Вот часть моих емаксовских конфигов, относящихся к Common Lisp:

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;  LISP ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;;;;;;;;; Functions ;;;;;;;;;;

(defun se:move-past-close-and-just-one-space ()
  "Move past next `)' and ensure just one space after it."
  (interactive)
  (up-list)
  (just-one-space))


(defun mb:unwrap-next-sexp (&optional kill-n-sexps)
  "Convert (x ...) to ..."
  (interactive "P")
  (forward-sexp)
  (backward-delete-char 1)
  (backward-up-list)
  (delete-char 1)
  (let ((start-region-to-kill (point)))
    (kill-sexp kill-n-sexps)
    (down-list)
    (delete-region start-region-to-kill (1- (point)))
    (backward-up-list))
  (lisp-indent-line))

;;;;;;;;;; Common Lisp ;;;;;;;;;;
(add-to-list 'load-path "/home/cp/arc/lisp/slime-cvs/slime")
(require 'slime)

;;;;; Functions ;;;;;
(defun cliki:start-slime ()
  (unless (slime-connected-p)
    (save-excursion (slime))))


;;;;; SLIME Setup ;;;;;



(slime-setup)
(slime-setup :autodoc t)
(set-variable 'slime-net-coding-system 'iso-latin-1-unix)


;(set-variable inferior-lisp-program "/home/cp/arc/lisp/acl62_trial/alisp")
;(set-variable inferior-lisp-program "clisp")
(setf inferior-lisp-program "lisp")


;;;;; Documentaion ;;;;;
(load "/usr/share/emacs/21.4/site-lisp/ilisp/extra/cltl2.el" )
(setf common-lisp-hyperspec-root "file:/usr/share/doc/hyperspec/")
(setf cltl2-root-url "file:///usr/share/doc/cltl/")

;;;;; Key bindings ;;;;;

(global-set-key "\C-cs" 'slime-selector)

(add-hook 'slime-connected-hook 'slime-ensure-typeout-frame)

(add-hook 'slime-mode-hook
      (lambda ()
        (define-key slime-mode-map  "^C^D^C" 'cltl2-lookup)
        (define-key slime-mode-map "^C^R" 'slime-compile-region)
        (define-key slime-mode-map  "^C^Dc"  'cltl2-lookup)
        (define-key slime-mode-map "\333" 'slime-arglist)
        (define-key slime-mode-map [(?\()] 'insert-parentheses)
        (define-key slime-mode-map [(?\))] 'se:move-past-close-and-just-one-space)
        (define-key slime-mode-map [(return)] 'newline-and-indent)
        (define-key slime-mode-map "\335" 'move-past-close-and-reindent)        
        (define-key slime-mode-map [(control ?\=)] (lambda () (interactive) (insert "(")))
        (define-key slime-mode-map [(control ?\\)] (lambda () (interactive) (insert ")")))
        
        ))



ЗЫ: обязательно прочитай всё доку по SLIME. И ещё поиищи статьи на cliki.net по slime и редактированию лиспа в Emacs
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.