Class: Lisp::PrimTypeChecks

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

Class Method Summary collapse

Class Method Details

.floatp_impl(args, env) ⇒ Object



34
35
36
37
# File 'lib/rubylisp/prim_type_checks.rb', line 34

def self.floatp_impl(args, env)
  val = args.car
  return Lisp::Boolean.with_value(val.type == :number && val.float?)
end

.functionp_impl(args, env) ⇒ Object



40
41
42
43
# File 'lib/rubylisp/prim_type_checks.rb', line 40

def self.functionp_impl(args, env)
  val = args.car
  return Lisp::Boolean.with_value(val.type == :function || val.type == :primitive)
end

.integerp_impl(args, env) ⇒ Object



28
29
30
31
# File 'lib/rubylisp/prim_type_checks.rb', line 28

def self.integerp_impl(args, env)
  val = args.car
  return Lisp::Boolean.with_value(val.type == :number && val.integer?)
end

.nilp_impl(args, env) ⇒ Object



46
47
48
# File 'lib/rubylisp/prim_type_checks.rb', line 46

def self.nilp_impl(args, env)
  return Lisp::Boolean.with_value(args.car.nil? || (args.car.pair? && args.car.empty?))
end

.not_nilp_impl(args, env) ⇒ Object



51
52
53
54
55
# File 'lib/rubylisp/prim_type_checks.rb', line 51

def self.not_nilp_impl(args, env)
  return Lisp::FALSE if args.car.nil?
  return Lisp::TRUE unless args.car.pair?
  return Lisp::Boolean.with_value(args.car.pair? && !args.car.empty?)
end

.registerObject



5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
# File 'lib/rubylisp/prim_type_checks.rb', line 5

def self.register
  Primitive.register("list?", "1")     {|args, env| Lisp::PrimTypeChecks::typep_impl(args.car, :pair) }
  Primitive.register("pair?", "1")     {|args, env| Lisp::PrimTypeChecks::typep_impl(args.car, :pair) }
  Primitive.register("symbol?", "1")   {|args, env| Lisp::PrimTypeChecks::typep_impl(args.car, :symbol) }
  Primitive.register("number?", "1")   {|args, env| Lisp::PrimTypeChecks::typep_impl(args.car, :number) }
  Primitive.register("frame?", "1")   {|args, env| Lisp::PrimTypeChecks::typep_impl(args.car, :frame) }

  Primitive.register("integer?", "1")  {|args, env| Lisp::PrimTypeChecks::integerp_impl(args, env) }
  Primitive.register("float?", "1")    {|args, env| Lisp::PrimTypeChecks::floatp_impl(args, env) }
  Primitive.register("function?", "1") {|args, env| Lisp::PrimTypeChecks::functionp_impl(args, env) }

  Primitive.register("nil?", "1")      {|args, env| Lisp::PrimTypeChecks::nilp_impl(args, env) }
  Primitive.register("null?", "1")     {|args, env| Lisp::PrimTypeChecks::nilp_impl(args, env) }
  Primitive.register("not-nil?", "1")  {|args, env| Lisp::PrimTypeChecks::not_nilp_impl(args, env) }
  Primitive.register("not-null?", "1") {|args, env| Lisp::PrimTypeChecks::not_nilp_impl(args, env) }
end

.typep_impl(val, sym) ⇒ Object



23
24
25
# File 'lib/rubylisp/prim_type_checks.rb', line 23

def self.typep_impl(val, sym)
  return Lisp::Boolean.with_value(val.type == sym)
end