Sha256: b565f9c97b0c1fb44eded84798992403842975c864045b541fccf00295e5aeb7

Contents?: true

Size: 1017 Bytes

Versions: 4

Compression:

Stored size: 1017 Bytes

Contents

# Scheme booleans helper
module SchemeBooleansHelper
  def if_idx_helper(other)
    if other[0] == '('
      idx = find_bracket_idx other, 0
      (find_next_value other[idx + 1..-1])[0]
    else
      _, other = find_next_value other
      (find_next_value other)[0]
    end
  end

  def if_helper(expr, other)
    if expr == '#f'
      if_idx_helper other
    else
      (find_next_value other)[0]
    end
  end
end

# Scheme booleans module
module SchemeBooleans
  include SchemeBooleansHelper
  def equal?(other)
    raise arg_err_build 2, other.size if other.size != 2
    other[0].to_s == other[1].to_s ? '#t' : '#f'
  end

  def not(other)
    raise arg_err_build 1, other.size if other.size != 1
    raise 'Invalid data type' unless check_for_bool other[0]
    other[0] == '#t' ? '#f' : '#t'
  end

  def if(other)
    raise arg_err_build 3, 0 if other.empty?
    expr, other = find_next_value other
    raise 3, 1 if other.empty?
    if_helper expr, other
  end
end

Version data entries

4 entries across 4 versions & 1 rubygems

Version Path
lisp-interpreter-0.3.5 lib/lisp/interpreter/boolean.rb
lisp-interpreter-0.3.4 lib/lisp/interpreter/boolean.rb
lisp-interpreter-0.3.3 lib/lisp/interpreter/boolean.rb
lisp-interpreter-0.3.2 lib/lisp/interpreter/boolean.rb