その他、gauche-mode の軽い設定など。

C-x C-e で評価すると、評価結果が minibuffer に表示されますが、末尾に改行が付いていて、不必要に minibuffer が拡がってしまうので、

;; C-x C-e 時に minibuffer が不必要に拡がるのを抑止。
(defadvice gauche-message (around expand-echoarea activate)
  "Not expand echo area, when the message was single-line."
  (let* ((fmt (ad-get-arg 0))
         (message (ad-get-args 1))
         (lines (with-temp-buffer
                  (insert (car message))
                  (count-lines-buffer))))
    (if (= 1 lines)
        (message fmt (car message))
      ad-do-it)))

としてそれを抑止してみました。
Emacs Lisp の M-: と同様の動作をして貰うために、

;; eval-expression.
(defun gauche-util-eval-expression (sexp)
  "Evaluate SEXP and print value in minibuffer."
  (interactive (list (read-string "Sexp: ")))
  (gauche-send-string-to-process (gauche-process) sexp))
(add-hook 'gauche-mode-hook
	  (lambda ()
		  (define-key (current-local-map)
        ;; [(control c) (meta :)] 'gauche-util-eval-expression)))
		    [(meta control :)] 'gauche-util-eval-expression)))

として M-C-: で minibuffer での評価もできる様にしてみました。

また、function-menu (fume) が動作してくれなくて悲しかったので、

;; setting for function-menu (fume).
(add-to-list 'fume-function-name-regexp-alist
    ;; Gauche
    '(gauche-mode . fume-function-name-regexp-scheme))
(add-to-list 'fume-find-function-name-method-alist
    ;; Gauche
    '(gauche-mode . fume-find-next-scheme-function))
(add-hook 'gauche-mode-hook
          (lambda ()
    (define-key (current-local-map) [(control c) r] 'fume-rescan-buffer)
    (define-key (current-local-map) [(meta p)] 'fume-goto-previous-function)
    (define-key (current-local-map) [(meta n)] 'fume-goto-next-function)))

と設定を追加しました。

こんな設定で、それなりに Emacs Lisp ライクな利用環境になってます。
あとは debugger かなあ。;; これは苦しいなあ。

しかし、gauche を使う設定とかで現実逃避してただけで、多値のこととか、

(use gauche.collection)
#<undef>
(fold2 (lambda (elt a b) (values (min elt a) (max elt b)))
       256 0
       (list 1 2 34 5 678 9 0 987 6 54 321))
0, 987

とかして、おおー、多値になるなるー、ってしただけです。
全く何やってんだか……。