Skip to content

Instantly share code, notes, and snippets.

@trikitrok
Last active June 30, 2024 14:40

Revisions

  1. trikitrok revised this gist Jul 5, 2014. 1 changed file with 4 additions and 5 deletions.
    9 changes: 4 additions & 5 deletions rpn.clj
    Original file line number Diff line number Diff line change
    @@ -1,5 +1,5 @@
    (ns rpn.core
    [:use [clojure [string :only [split]]]])
    [:use [clojure [string :only [split]]]])

    (defn parse-int [s]
    (Integer/parseInt (re-find #"\A-?\d+" s)))
    @@ -9,10 +9,9 @@
    [operators {"+" + "-" - "*" * "/" quot}
    parse-token
    (fn [token]
    (let [op (get operators token)]
    (if (nil? op)
    (parse-int token)
    op)))]
    (if (contains? operators token)
    (get operators token)
    (parse-int token)))]
    (map parse-token
    (split expression #"\s"))))

  2. trikitrok revised this gist Jul 4, 2014. 1 changed file with 7 additions and 7 deletions.
    14 changes: 7 additions & 7 deletions rpn.clj
    Original file line number Diff line number Diff line change
    @@ -1,9 +1,10 @@
    (ns rpn.core)
    (ns rpn.core
    [:use [clojure [string :only [split]]]])

    (defn parse-int [s]
    (Integer/parseInt (re-find #"\A-?\d+" s)))

    (defn parse-expression [expression]
    (defn parse [expression]
    (let
    [operators {"+" + "-" - "*" * "/" quot}
    parse-token
    @@ -13,18 +14,17 @@
    (parse-int token)
    op)))]
    (map parse-token
    (clojure.string/split expression #"\s"))))
    (split expression #"\s"))))

    (defn process-symbol [stack symbol]
    (if (number? symbol)
    (conj stack symbol)
    (conj (vec (drop-last 2 stack))
    (conj (pop (pop stack))
    (apply symbol (take-last 2 stack)))))

    (defn evaluate [expression]
    (nth
    (peek
    (reduce
    process-symbol
    []
    (parse-expression expression))
    0))
    (parse expression))))
  3. trikitrok created this gist Jul 4, 2014.
    30 changes: 30 additions & 0 deletions rpn.clj
    Original file line number Diff line number Diff line change
    @@ -0,0 +1,30 @@
    (ns rpn.core)

    (defn parse-int [s]
    (Integer/parseInt (re-find #"\A-?\d+" s)))

    (defn parse-expression [expression]
    (let
    [operators {"+" + "-" - "*" * "/" quot}
    parse-token
    (fn [token]
    (let [op (get operators token)]
    (if (nil? op)
    (parse-int token)
    op)))]
    (map parse-token
    (clojure.string/split expression #"\s"))))

    (defn process-symbol [stack symbol]
    (if (number? symbol)
    (conj stack symbol)
    (conj (vec (drop-last 2 stack))
    (apply symbol (take-last 2 stack)))))

    (defn evaluate [expression]
    (nth
    (reduce
    process-symbol
    []
    (parse-expression expression))
    0))