Class: Lisp::PrimEquivalence

Inherits:
Object
  • Object
show all
Defined in:
lib/rubylisp/prim_equivalence.rb

Class Method Summary collapse

Class Method Details

.eq_impl(args, env) ⇒ Object



63
64
65
66
67
# File 'lib/rubylisp/prim_equivalence.rb', line 63

def self.eq_impl(args, env)
  o1 = args.car
  o2 = args.cadr
  Lisp::Boolean.with_value(o1.eq?(o2))
end

.equal_impl(args, env) ⇒ Object



77
78
79
80
81
# File 'lib/rubylisp/prim_equivalence.rb', line 77

def self.equal_impl(args, env)
  o1 = args.car
  o2 = args.cadr
  Lisp::Boolean.with_value(o1.equal?(o2))
end

.eqv_impl(args, env) ⇒ Object



49
50
51
52
53
# File 'lib/rubylisp/prim_equivalence.rb', line 49

def self.eqv_impl(args, env)
  o1 = args.car
  o2 = args.cadr
  Lisp::Boolean.with_value(o1.eqv?(o2))
end

.neq_impl(args, env) ⇒ Object



70
71
72
73
74
# File 'lib/rubylisp/prim_equivalence.rb', line 70

def self.neq_impl(args, env)
  o1 = args.car
  o2 = args.cadr
  Lisp::Boolean.with_value(!o1.eq?(o2))
end

.nequal_impl(args, env) ⇒ Object



84
85
86
87
88
# File 'lib/rubylisp/prim_equivalence.rb', line 84

def self.nequal_impl(args, env)
  o1 = args.car
  o2 = args.cadr
  Lisp::Boolean.with_value(!o1.equal?(o2))
end

.neqv_impl(args, env) ⇒ Object



56
57
58
59
60
# File 'lib/rubylisp/prim_equivalence.rb', line 56

def self.neqv_impl(args, env)
  o1 = args.car
  o2 = args.cadr
  Lisp::Boolean.with_value(!o1.eqv?(o2))
end

.registerObject



5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
# File 'lib/rubylisp/prim_equivalence.rb', line 5

def self.register
  Primitive.register("=", "2", "(= n1 n2)\n\nEquivalent to (eqv? n1 n2)") do |args, env|
    Lisp::PrimEquivalence::eqv_impl(args, env)
  end
  
  Primitive.register("==", "2", "(== n1 n2)\n\nEquivalent to (eqv? n1 n2)") do |args, env|
    Lisp::PrimEquivalence::eqv_impl(args, env)
  end
  
  Primitive.register("!=", "2", "(!= n1 n2)\n\nEquivalent to (neqv? n1 n2).") do |args, env|
    Lisp::PrimEquivalence::neqv_impl(args, env)
  end
  
  Primitive.register("/=", "2", "(/= n1 n2)\n\nEquivalent to (neqv? n1 n2).") do |args, env|
    Lisp::PrimEquivalence::neqv_impl(args, env)
  end

  Primitive.register("eq?", "2") do |args, env|
    Lisp::PrimEquivalence::eq_impl(args, env)
  end
  
  Primitive.register("neq?", "2") do |args, env|
    Lisp::PrimEquivalence::neq_impl(args, env)
  end
  
  Primitive.register("eqv?", "2") do |args, env|
    Lisp::PrimEquivalence::eqv_impl(args, env)
  end
  
  Primitive.register("neqv?", "2") do |args, env|
    Lisp::PrimEquivalence::eqv_impl(args, env)
  end
  
  Primitive.register("equal?", "2") do |args, env|
    Lisp::PrimEquivalence::equal_impl(args, env)
  end
  
  Primitive.register("nequal?", "2") do |args, env|
    Lisp::PrimEquivalence::nequal_impl(args, env)
  end
  
end