« プログラミングを始めるには(20) | Main | プログラミングを始めるには(22) »

August 19, 2014

プログラミングを始めるには(21)

「プログラミングを始めるには」というタイトルのわりに、さあこれからプログラミングを始めようという段階では誰も考えないような話が續いた氣がする。おそらく最近の人はプログラムが書けるようになったら、何か畫面が出てきて、それを操作したら、それらしい動きをするものを想像するのだろう。

(require 'cl)
(require 'eieio)

(defclass test-class ()
  ((data :initarg data
	 :initform '(((man woman) . love) ((oldman sea) . anekdoten)))))

(defmethod test-add ((obj test-class) key1 key2 &optional add)
  (setf (slot-value obj data)
	(append (slot-value obj data) (list (cons (list key1 key2) add)))))

(defmethod test-run ((obj test-class) key1 key2 &optional sym)
  (let* ((value (slot-value obj data))
	 (answer (assoc (list key1 key2) value)))
    (if answer (cdr answer)
      (test-add obj key1 key2 sym)
      (test-run obj key1 key2))))
      
(defun my-app (key1 key2 answer)
  (interactive "sKEY1: \nsKEY2: \nsSYM: ")
  (let* ((test-obj (make-instance 'test-class))
	 (answer (test-run test-obj
			   (intern key1) (intern key2) (intern answer)))
	 (buffer (get-buffer-create "●MY-APP-OUTPUT●")))
    (save-excursion
      (set-buffer buffer)
      (goto-char (point-max))
      (insert (format "\n\n%16s : %s\n%16s : %s\n%16s : %s\n"
		      "key1" key1 "key2" key2 "answer" (symbol-name answer)))
      (pop-to-buffer buffer))))

Ws000096


ちょっとくどくなってきたが、先日來のサンプルプログラムにものすごく簡單な操作性をくっつけるとこうなる。my-appを起動するとミニバッファからKEY1KEY2SYMの3個の入力を要求される。3番目の入力はキーのペアが未登錄の時だけ反映される。●MY-APP-OUTPUT●に表示された上から2つはインスタンスに初期登錄されている情報。何氣に未登錄の場合だけtest-runを呼び返しているが、これは別に再歸のつもりでなく、面倒くさいからそうしただけだ。Emacsではこのmy-appのようなプログラムをアプリとは呼ばず、コマンドと呼ぶ。

さて、ここまでのことをササっとやれるようになるには、Emacsあるいはelispの何を學ぶ必要があるのかについて考えていくことにする。

|

« プログラミングを始めるには(20) | Main | プログラミングを始めるには(22) »

Comments

Post a comment



(Not displayed with comment.)


Comments are moderated, and will not appear on this weblog until the author has approved them.



TrackBack

TrackBack URL for this entry:
http://app.cocolog-nifty.com/t/trackback/74224/60174283

Listed below are links to weblogs that reference プログラミングを始めるには(21):

« プログラミングを始めるには(20) | Main | プログラミングを始めるには(22) »