Example #1
0
def contains_q(args: List[MalExpression]) -> MalExpression:
    if len(args) < 2:
        raise MalInvalidArgumentException(MalNil(),
                                          "contains? requires two arguments")
    if not isinstance(args[0], MalHash_map):
        raise MalInvalidArgumentException(args[0], "not a hash-map")
    if not isinstance(args[1], MalString):
        return MalBoolean(False)
    return MalBoolean(args[1].native() in args[0].native())
Example #2
0
def equal(a: MalExpression, b: MalExpression) -> MalBoolean:
    if (isinstance(a, MalList) or isinstance(a, MalVector)) and (isinstance(
            b, MalList) or isinstance(b, MalVector)):
        a_native = a.native()
        b_native = b.native()
        if len(a_native) != len(b_native):
            return MalBoolean(False)
        for x in range(0, len(a_native)):
            if not equal(a_native[x], b_native[x]):
                return MalBoolean(False)
        return MalBoolean(True)
    if type(a) == type(b) and a.native() == b.native():
        return MalBoolean(True)
    return MalBoolean(False)
Example #3
0
 def test_if_basic_false_no_fourth_arg(self):
     env = Env(None)
     self.assertEqual(
         "nil",
         str(
             step4_if_fn_do.EVAL(
                 MalList([MalSymbol("if"), MalBoolean(False), MalInt(4321)]), env
             )
         ),
     )
Example #4
0
 def test_if_basic_false(self):
     env = Env(None)
     self.assertEqual(
         1234,
         step4_if_fn_do.EVAL(
             MalList(
                 [MalSymbol("if"), MalBoolean(False), MalInt(4321), MalInt(1234)]
             ),
             env,
         ).native(),
     )
Example #5
0
def empty_q(x: MalExpression) -> MalBoolean:
    if sequential_q(x):
        return MalBoolean(len(x.native()) == 0)
    raise MalInvalidArgumentException(x, "not a list")
Example #6
0
def list_q(x: MalExpression) -> MalBoolean:
    if isinstance(x, MalList):
        return MalBoolean(True)
    return MalBoolean(False)
Example #7
0
def sequential_q(arg: MalExpression) -> MalExpression:
    return MalBoolean(isinstance(arg, MalList) or isinstance(arg, MalVector))
Example #8
0
def map_q(arg: MalExpression) -> MalExpression:
    return MalBoolean(isinstance(arg, MalHash_map))
Example #9
0
def vector_q(arg: MalExpression) -> MalExpression:
    return MalBoolean(isinstance(arg, MalVector))
Example #10
0
def symbol_q(arg: MalExpression) -> MalExpression:
    return MalBoolean(isinstance(arg, MalSymbol))
Example #11
0
def false_q(arg: MalExpression) -> MalExpression:
    return MalBoolean(isinstance(arg, MalBoolean) and not arg.native())
Example #12
0
def true_q(arg: MalExpression) -> MalExpression:
    return MalBoolean(isinstance(arg, MalBoolean) and arg.native())
Example #13
0
def nil_q(arg: MalExpression) -> MalExpression:
    return MalBoolean(isinstance(arg, MalNil))
Example #14
0
def not_(expr: MalExpression) -> MalExpression:
    if isinstance(expr, MalNil) or (isinstance(expr, MalBoolean)
                                    and expr.native() is False):
        return MalBoolean(True)
    else:
        return MalBoolean(False)
Example #15
0
 "<=":
 MalFunctionCompiled(lambda args: less_equal(args[0], args[1])),
 ">":
 MalFunctionCompiled(lambda args: less(args[1], args[0])),
 ">=":
 MalFunctionCompiled(lambda args: less_equal(args[1], args[0])),
 "read-string":
 MalFunctionCompiled(lambda args: read_string(args[0])),
 "slurp":
 MalFunctionCompiled(lambda args: slurp(args[0])),
 "str":
 MalFunctionCompiled(lambda args: core_str(args)),
 "atom":
 MalFunctionCompiled(lambda args: MalAtom(args[0])),
 "atom?":
 MalFunctionCompiled(lambda args: MalBoolean(isinstance(args[0], MalAtom))),
 "deref":
 MalFunctionCompiled(lambda args: deref_q(args[0])),
 "reset!":
 MalFunctionCompiled(lambda args: reset(args[0], args[1])),
 "cons":
 MalFunctionCompiled(lambda args: cons(args[0], args[1])),
 "concat":
 MalFunctionCompiled(concat),
 "not":
 MalFunctionCompiled(lambda args: not_(args[0])),
 "nth":
 MalFunctionCompiled(lambda args: nth(args[0], args[1])),
 "apply":
 MalFunctionCompiled(lambda args: apply(args)),
 "map":
Example #16
0
 def visit_mBoolean(self, node, children) -> MalBoolean:
     if node.value == "true":
         return MalBoolean(True)
     if node.value == "false":
         return MalBoolean(False)
     raise Exception("Internal reader error")
Example #17
0
def less_equal(a: MalExpression, b: MalExpression) -> MalBoolean:
    if not isinstance(a, MalInt):
        raise MalInvalidArgumentException(a, "not an int")
    if not isinstance(b, MalInt):
        raise MalInvalidArgumentException(b, "not an int")
    return MalBoolean(a.native() <= b.native())
Example #18
0
def keyword_q(arg: MalExpression) -> MalExpression:
    return MalBoolean(isinstance(arg, MalString) and arg.is_keyword())