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

有人对在一条推文中编写一个中缀到 RPN 程序有一些好的想法吗?我失败了。我可以用 235 个字符写出那个。

4

1 回答 1

3

这是 Clojure 中的一个(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 回答