Class: Lisp::PrimTypeChecks
Class Method Summary collapse
- .floatp_impl(args, env) ⇒ Object
- .functionp_impl(args, env) ⇒ Object
- .integerp_impl(args, env) ⇒ Object
- .nilp_impl(args, env) ⇒ Object
- .not_nilp_impl(args, env) ⇒ Object
- .register ⇒ Object
- .typep_impl(val, sym) ⇒ Object
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 |
.register ⇒ Object
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 |