今日は四則演算。
まず初めにトークン処理関数。
あー、ミス発見。直さなきゃ。
←done.
(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)))
で、優先順位を無視した数式処理関数。
funcall
が出てこなくて苦労した。情けない…。 ;(
(defun ys:eval-tokens (tokens) (let (token sign value) (while tokens (setq token (car tokens)) (setq tokens (cdr tokens)) (cond ((string-match "[0-9]+" token) (if value (setq value (funcall sign value (string-to-int token))) (setq value (string-to-int token)))) ((string= "+" token) (setq sign '+)) ((string= "-" token) (setq sign '-)) ((string= "*" token) (setq sign '*)) ((string= "/" token) (setq sign '/)))) value))
優先順位に対応した数式処理関数はまた明日 (か明後日)。