«前の日記(2005.05.08 / Sunday) 最新 次の日記(2005.05.10 / Tuesday)» 編集

Hena Hena Nikki

2003|05|06|07|08|09|10|11|12|
2004|01|02|03|04|05|06|07|08|09|10|11|12|
2005|01|02|03|04|05|06|07|08|09|10|11|12|
2006|01|02|03|04|05|06|07|08|09|10|11|12|
2007|01|02|03|04|05|06|07|08|09|10|11|12|
2008|01|02|03|04|05|06|07|08|09|10|11|12|
2009|01|02|03|04|05|06|07|08|09|10|11|12|
2010|01|02|03|04|05|06|07|08|09|10|11|12|
2011|01|02|03|04|05|06|07|08|10|11|12|
2012|01|02|03|04|05|06|07|08|10|12|
2013|01|02|04|06|

2005.05.09 / Monday [長年日記]

* [computer] 再帰のお勉強をやってみる (四則演算 vol.3)

四則演算の続き。 面倒臭くなってきたのでかなりテキトー。

(defun ys:get-tokens (expression)
  (let (tokens)
    (while (string-match "[0-9]+\\|[-+*/()]" expression)
      (setq tokens (cons (match-string 0 expression) tokens))
      (setq expression (replace-match "" nil t expression)))
    (reverse tokens)))
(defun ys:calc-subfunc (tokens) (let (token new-tokens) ;; かっこをはずす (while tokens (setq token (car tokens)) (setq tokens (cdr tokens)) (when (string= "(" token) (let (subtokens (depth 1)) (while (> depth 0) (unless tokens (error "かっこの対応がおかしいよ!")) (setq token (car tokens)) (setq tokens (cdr tokens)) (cond ((string= ")" token) (setq depth (1- depth))) ((string= "(" token) (setq depth (1+ depth)))) (when (> depth 0) (setq subtokens (cons token subtokens)))) (setq token (number-to-string (ys:calc-subfunc (reverse subtokens)))))) (when (string= ")" token) (error "かっこの対応がおかしいよ!")) (setq new-tokens (cons token new-tokens))) (setq tokens (reverse new-tokens)) (setq new-tokens nil) ;; *, / を計算する (let ((number (string-to-number (car tokens))) term) (setq tokens (cdr tokens)) (while tokens (setq token (car tokens)) (setq tokens (cdr tokens)) (if (not term) (cond ((string= "+" token) (setq term '+)) ((string= "-" token) (setq term '-)) ((string= "*" token) (setq term '*)) ((string= "/" token) (setq term '/)) (t (error "変なところに算術記号じゃない文字が?"))) (if (or (eq term '*) (eq term '/)) (progn (setq number (funcall term number (string-to-number token))) (setq term nil)) (setq new-tokens (cons term (cons number new-tokens))) (setq number (string-to-number token) term nil)))) (setq tokens (reverse (cons number new-tokens))) ;; +, - を計算する (let ((value (car tokens))) (setq tokens (cdr tokens)) (while tokens (setq term (car tokens)) (setq tokens (cdr tokens)) (setq number (car tokens)) (setq tokens (cdr tokens)) (setq value (funcall term value number))) value))))
(defun ys:calculation (expression) (ys:calc-subfunc (ys:get-tokens expression)))

あー、無駄な部分があるー。 でも放置。

* [computer/update] WideStudio ver.3.90-5

UNIX 系 OS や Windows 上で動くウィンドウ・アプリケーション統合開発環境。 約 3 週間ぶりの version up。

* [computer/update] MinGW ver.4.0.2

Windows 向け GCC を中心とした開発環境。 所謂人柱版。

* [cd/dvd] Dynamite in / 東京事変

7/13 発売予定のツアードキュメント DVD。

* [cd/dvd] Dynamite out / 東京事変

8/17 発売予定のライブ完全収録 DVD。

6/24 には NHK で“ポップジャム・ピュアサイド東京事変”という特番が予定されている模様。 楽しみだ。 :)


  • この日記には本日 名の方が訪問してくださっているようです。 また、昨日は 名の方が訪問してくださったようです。
  • この日記の更新情報の取得には antenna.lirs を利用するのがおすすめです。