2

プログラム (115 文字)

(defun rpn(e)(let((s()))(dolist(x e)(if(numberp x)(push x s)(push(eval(reverse(list(pop s)(pop s)x)))s)))(car s)))

簡単なテスト:

CL-USER> (rpn '(1 2 3 * + 4 2 / +))

そして、それは戻ります9

1 つのツイート内に Infix-to-RPN プログラムを記述することについて、良いアイデアを持っている人はいますか? 私は失敗しました。私は235文字でそれを書くことができます。

4

1 に答える 1

3

これは Clojure の 1 つです (88 文字):

(defn rpn [& e](reduce #(if (fn? %2)(let [[l r & m]%](cons (%2 r l) m))(cons %2 %))[]e))

そして、ゴルフをしていないバージョン:

(defn rpn [& expr]
  (reduce (fn [stack op]
            (if (fn? op)
              (let [[l r & m] stack]
                (cons (op r l) m))
              (cons op stack)))
          []
          expr))
于 2010-09-21T12:51:32.160 に答える