読者です 読者をやめる 読者になる 読者になる

おもしろwebサービス開発日記

Ruby や Rails を中心に、web技術について書いています

lisp入門

家のmac minicarbon emacsrubyを書いていて、保存しようとC-x C-sしたらこんなエラーがでた。

Symbol's function definition is void: coding-system-to-mime-charset

調べてみると、どうも最近のcarcon emacsruby-modeが日本語に対応していないみたい。

STBBS.NET blog: Carbon Emacsで ruby-modeと日本語

上記のブログではコメントアウトして対応しているけど、もう少しキチンと対応したいなーと思ったのでソースを見てみた。

(defun ruby-mode-set-encoding ()
  (save-excursion
    (widen)
    (goto-char (point-min))
    (when (re-search-forward "[^\0-\177]" nil t)
      (goto-char (point-min))
      (let ((coding-system
	     (coding-system-to-mime-charset
	      (or coding-system-for-write
		  buffer-file-coding-system))))
	(setq coding-system
	      (if coding-system
		  (symbol-name
		   (or (and ruby-use-encoding-map
			    (cdr (assq coding-system ruby-encoding-map)))
		       coding-system))
		"ascii-8bit"))
	(if (looking-at "^#![^\n]*ruby") (beginning-of-line 2))
	(cond ((looking-at "\\s *#.*-\*-\\s *\\(en\\)?coding\\s *:\\s *\\([-a-z0-9_]+\\)")
	       (unless (string= (match-string 2) coding-system)
		 (goto-char (match-beginning 2))
		 (delete-region (point) (match-end 2))
		 (insert coding-system)))
	      ((looking-at "\\s *#.*coding\\s *[:=]"))
	      (t (insert "# -*- coding: " coding-system " -*-\n"))
	      )))))

ぜんぜんわかりません><

ちょっと勉強してみようかな。でもあんまり力を入れて勉強する暇もないので、1時間くらいやって無理そうだったらまた次回。

lispの基本要素まとめ

  • 関数
    • 関数名 引数 引数...
  • 変数
    • 型なし
  • アトム
    • 整数
    • 浮動小数点数
    • 文字
      • ?aみたいに頭に?をつける
      • C-aは?\C-a
      • Escは\e
      • tabは\t
    • 文字列
      • ""でくくる。シングルクォーテーションは使わないのかな
    • 真偽値
      • 真はt
      • 偽はnil
      • nil以外はだいたい真と扱われることが多い
    • シンボル
      • いろんなもの(関数など)の名前を表す
      • 頭に'をつける

ソースの関数まとめ

defun
呼び出されたときに新しい値関数を定義する関数。
save-excursion
カーソル位置を記憶
widen
ワイドニングを行う*1
goto-char
ポイント(カーソル位置)の移動
point-min
カレントバッファの最初の文字の位置を返す
(let ( (var1 value1) (var2 value2))...)
statement-block)):var1にvalu1を代入、var2にvalue2を代入。その後statement-blockを実行
(setq var1 value2 var2 value2 ...)
var1にvalue1を代入、var2にvalue2を代入。戻り値は最後に代入された値。

うーん

どうもきちんと理解するためにはあと数時間かかりそうな予感。とりあえず今日はここまで。