2010-09-21 3 views
2

Le programme (115 Chars)Un programme RPN Expr-Eval complet Dans un Tweet? - "OUI NOUS POUVONS!", En utilisant LISP

(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))) 

Un simple test:

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

Et il retourne 9

Tout le monde a de bonnes idées à propos de l'écriture d'un programme Infix-to-RPN dans un seul tweet? J'ai échoué. Je peux écrire celui en 235 caractères.

+1

je serais plus heureux si cette question a été changé pour « Peut-on .. .? " et ensuite mettre le programme dans une réponse. En ce moment, ce n'est pas vraiment une question. –

+1

Ce sera définitivement fermé, sauf s'il suit les directives à http://meta.stackexchange.com/questions/24242/acceptable-level-of-code-golf-questions –

Répondre

3

Voici un dans Clojure (88 caractères):

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

Et la version non golfed:

(defn rpn [& expr] 
    (reduce (fn [stack op] 
      (if (fn? op) 
       (let [[l r & m] stack] 
       (cons (op r l) m)) 
       (cons op stack))) 
      [] 
      expr)) 
Questions connexes