diff options
author | Rich Hickey <richhickey@gmail.com> | 2006-03-28 16:20:10 +0000 |
---|---|---|
committer | Rich Hickey <richhickey@gmail.com> | 2006-03-28 16:20:10 +0000 |
commit | 388d2be66c5726698355c46e92c93aec1e369ee0 (patch) | |
tree | c146f6e167aff92254d64336e4d513572641296e /src | |
parent | e63b0c3f98628dce4a9a829466ab67d175dd4414 (diff) |
added eq/eql/equal
Diffstat (limited to 'src')
-rw-r--r-- | src/org/clojure/runtime/RT.java | 33 |
1 files changed, 33 insertions, 0 deletions
diff --git a/src/org/clojure/runtime/RT.java b/src/org/clojure/runtime/RT.java index 1d4d662c..4ecabb82 100644 --- a/src/org/clojure/runtime/RT.java +++ b/src/org/clojure/runtime/RT.java @@ -14,6 +14,39 @@ package org.clojure.runtime; public class RT{ + static public Object eq(Object arg1, Object arg2) { + return (arg1 == arg2)?Boolean.TRUE:null; + } + + static public Object eql(Object arg1, Object arg2) { + if(arg1 == arg2) + return Boolean.TRUE; + if(arg1 == null || arg2 == null) + return null; + if(arg1 instanceof Num + && arg1.getClass() == arg2.getClass() + && arg1.equals(arg2)) + return Boolean.TRUE; + if(arg1.getClass() == Character.class + && arg2.getClass() == Character.class + && arg1.equals(arg2)) + return Boolean.TRUE; + return null; + } + + static public Object equal(Object arg1, Object arg2) { + if(arg1 == null) + return arg2 == null ? Boolean.TRUE : null; + else if(arg2 == null) + return null; + return (eql(arg1,arg2) != null + || (arg1.getClass() == Cons.class + && arg2.getClass() == Cons.class + && equal(((Cons)arg1).first,((Cons)arg2).first)!=null + && equal(((Cons)arg1).rest,((Cons)arg2).rest)!=null)) + ?Boolean.TRUE:null; + } + static public Cons cons(Object x, Cons y) { return new Cons(x, y); |