Dotted pairs reading/printing correctly
This commit is contained in:
parent
0321401c2a
commit
d01bb68c0f
|
@ -54,7 +54,7 @@
|
||||||
;; Lisp 1.5 supported octal as well as decimal and scientific notation
|
;; Lisp 1.5 supported octal as well as decimal and scientific notation
|
||||||
"number := integer | decimal | scientific | octal;
|
"number := integer | decimal | scientific | octal;
|
||||||
integer := #'-?[1-9][0-9]*';
|
integer := #'-?[1-9][0-9]*';
|
||||||
decimal := #'-?[1-9][0-9]*\\.?[0-9]*' | #'0\\.[0-9]*';
|
decimal := #'-?[1-9][0-9]*\\.?[0-9]*' | #'0.[0-9]*';
|
||||||
scientific := coefficient e exponent;
|
scientific := coefficient e exponent;
|
||||||
coefficient := decimal;
|
coefficient := decimal;
|
||||||
exponent := integer;
|
exponent := integer;
|
||||||
|
@ -248,7 +248,7 @@
|
||||||
(generate (nth p 2)))
|
(generate (nth p 2)))
|
||||||
:exponent (generate (second p))
|
:exponent (generate (second p))
|
||||||
:fncall (gen-fn-call p)
|
:fncall (gen-fn-call p)
|
||||||
:mvar (upper-case (second p))
|
:mvar (symbol (upper-case (second p)))
|
||||||
:octal (let [n (read-string (strip-leading-zeros (second p) "0"))
|
:octal (let [n (read-string (strip-leading-zeros (second p) "0"))
|
||||||
scale (generate (nth p 2))]
|
scale (generate (nth p 2))]
|
||||||
(* n (expt 8 scale)))
|
(* n (expt 8 scale)))
|
||||||
|
|
|
@ -1,6 +1,7 @@
|
||||||
(ns beowulf.sexpr-test
|
(ns beowulf.sexpr-test
|
||||||
(:require [clojure.math.numeric-tower :refer [abs]]
|
(:require [clojure.math.numeric-tower :refer [abs]]
|
||||||
[clojure.test :refer :all]
|
[clojure.test :refer :all]
|
||||||
|
[beowulf.cons-cell :refer :all]
|
||||||
[beowulf.read :refer [parse simplify generate]]
|
[beowulf.read :refer [parse simplify generate]]
|
||||||
[beowulf.print :refer :all]))
|
[beowulf.print :refer :all]))
|
||||||
|
|
||||||
|
@ -74,3 +75,15 @@
|
||||||
actual (generate (simplify (parse "0.6E2")))]
|
actual (generate (simplify (parse "0.6E2")))]
|
||||||
(is (< (abs (- actual expected)) 0.0001))))
|
(is (< (abs (- actual expected)) 0.0001))))
|
||||||
|
|
||||||
|
(deftest dotted-pair-tests
|
||||||
|
(testing "Reading dotted pairs"
|
||||||
|
(let [expected "(A . B)"
|
||||||
|
actual (prin (generate (simplify (parse expected))))]
|
||||||
|
(is (= actual expected)))
|
||||||
|
(let [expected "(A B C . D)"
|
||||||
|
actual (prin (generate (simplify (parse expected))))]
|
||||||
|
(is (= actual expected)))
|
||||||
|
(let [expected "(A B (C . D) E)"
|
||||||
|
actual (prin (generate (simplify (parse expected))))]
|
||||||
|
(is (= actual expected)))
|
||||||
|
))
|
||||||
|
|
Loading…
Reference in a new issue