def symbol_cond(fun, args):
	for x in args:
		variant = x.data
		sub = variant.second.data
		condition = eval(variant.first, fun)
		if condition:
			return eval(sub, fun)
	return Atom.NIL
Exemple #2
0
def symbol_mod(fun, args):
	result = float(eval(args[0], fun))
	for x in args[1:]:
		x = eval(x, fun)
		if x == 0:
			raise LispError("MOD: Division by zero")
		result %= x
	return result
Exemple #3
0
def symbol_slash(fun, args):
    result = float(eval(args[0], fun))
    for x in args[1:]:
        x = eval(x, fun)
        if x == 0:
            raise LispError("/: Division by zero")
        result /= x
    return result
def symbol_cond(fun, args):
    for x in args:
        variant = x.data
        sub = variant.second.data
        condition = eval(variant.first, fun)
        if condition:
            return eval(sub, fun)
    return Atom.NIL
Exemple #5
0
def symbol_read_char(fun, args):
    handle = eval(args[0], fun)
    if handle not in file_handles:
        raise LispError("READ-CHAR: File handle not active")
    ch = file_handles[handle].read(1)
    if not ch:
        return Atom.make_symbol("EOF")
    return "\"%s\"" % ch
Exemple #6
0
def symbol_read(fun, args):
    handle = eval(args[0], fun)
    if handle not in file_handles:
        raise LispError("READ: File handle not active")
    try:
        parser = LispParser.LispParser(file_handles[handle])
        return parser.read_object()
    except StopIteration:
        return Atom.make_symbol("EOF")
def symbol_do(fun, args):
	condition = args[0]
	body = args[1:]
	result = Atom.NIL
	while True:
		if not eval(condition, fun):
			return result
		for s in body:
			result = Atom.evaluate(s, fun)
	return result
def symbol_do(fun, args):
    condition = args[0]
    body = args[1:]
    result = Atom.NIL
    while True:
        if not eval(condition, fun):
            return result
        for s in body:
            result = Atom.evaluate(s, fun)
    return result
Exemple #9
0
def symbol_open(fun, args):
    global file_handles, next_handle
    filename = eval(args[0], fun)
    try:
        file_handles[next_handle] = open(filename)
        next_handle += 1
        return next_handle - 1
    except Exception as e:
        raise LispError("OPEN: Couldn't open '%s' (%s)" %
                        (filename, e.__str__()))
Exemple #10
0
def symbol_read_line(fun, args):
    handle = eval(args[0], fun)
    if handle not in file_handles:
        raise LispError("READ-LINE: File handle not active")
    try:
        while True:
            line = file_handles[handle].readline()
            if not line:
                raise LispError("READ-LINE: End of file")
            if line != "\n":
                break

        if line[-1] == "\n":
            line = line[:-1]
        return Atom.Atom(Atom.Atom.STRING, line)
    except Exception as e:
        raise LispError(e.__str__())
Exemple #11
0
def symbol_load(fun, args):
    filename = eval(args[0], fun)
    print("Loading %s" % filename)
    try:
        file = open(filename)
    except Exception as e:
        print("Failed (%s)" % e)
        return Atom.NIL

    parser = LispParser.LispParser(file)
    while True:
        try:
            atom = parser.read_object()
        except StopIteration:
            break

        try:
            result = Atom.evaluate(atom, fun, True)
        except LispError as err:
            print("Error: %s" % err)
    file.close()
    print("Done")
    return Atom.NIL
Exemple #12
0
def symbol_if(fun, args):
	condition = eval(args[0], fun)
	if condition:
		return Atom.evaluate(args[1], fun)
	option2 = Atom.evaluate(args[2], fun) if len(args) > 2 else Atom.NIL
	return option2
Exemple #13
0
def symbol_close(fun, args):
    handle = eval(args[0], fun)
    if handle not in file_handles:
        raise LispError("CLOSE: File handle not active")
    file_handles[handle].close()
    file_handles.pop(handle)
Exemple #14
0
def symbol_one_minus(fun, args):
    return eval(args[0], fun) - 1
Exemple #15
0
def symbol_sqrt(fun, args):
    return math.sqrt(eval(args[0], fun))
Exemple #16
0
def symbol_minus(fun, args):
    sum = eval(args[0], fun)
    for x in args[1:]:
        x = eval(x, fun)
        sum -= x
    return sum
Exemple #17
0
def symbol_acos(fun, args):
	return math.acos(eval(args[0], fun))
Exemple #18
0
def symbol_sqrt(fun, args):
	return math.sqrt(eval(args[0], fun))
Exemple #19
0
def symbol_acos(fun, args):
    return math.acos(eval(args[0], fun))
Exemple #20
0
def symbol_or(fun, args):
	for x in args:
		condition = eval(x, fun)
		if condition:
			return Atom.T
	return Atom.NIL
Exemple #21
0
def symbol_and(fun, args):
	for x in args:
		condition = eval(x, fun)
		if not condition:
			return Atom.NIL
	return Atom.T
Exemple #22
0
def symbol_eq(fun, args):
    first = eval(args[0], fun)
    second = eval(args[1], fun)
    return first == second
Exemple #23
0
def symbol_plus(fun, args):
    sum = 0
    for x in args:
        x = eval(x, fun)
        sum += x
    return sum
Exemple #24
0
def symbol_star(fun, args):
    result = eval(args[0], fun)
    for x in args[1:]:
        x = eval(x, fun)
        result *= x
    return result
Exemple #25
0
def symbol_sin(fun, args):
    return math.sin(eval(args[0], fun))
Exemple #26
0
def symbol_plus(fun, args):
	sum = 0
	for x in args:
		x = eval(x, fun)
		sum += x
	return sum
Exemple #27
0
def symbol_eq(fun, args):
	first = eval(args[0], fun)
	second = eval(args[1], fun)
	return first == second
Exemple #28
0
def symbol_one_minus(fun, args):
	return eval(args[0], fun) - 1
Exemple #29
0
def symbol_sin(fun, args):
	return math.sin(eval(args[0], fun))
Exemple #30
0
def symbol_atan(fun, args):
    return math.atan(eval(args[0], fun))
Exemple #31
0
def symbol_atan(fun, args):
	return math.atan(eval(args[0], fun))
Exemple #32
0
def symbol_one_plus(fun, args):
    return eval(args[0], fun) + 1
Exemple #33
0
def symbol_one_plus(fun, args):
	return eval(args[0], fun) + 1
Exemple #34
0
def symbol_and(fun, args):
    for x in args:
        condition = eval(x, fun)
        if not condition:
            return Atom.NIL
    return Atom.T
Exemple #35
0
def symbol_minus(fun, args):
	sum = eval(args[0], fun)
	for x in args[1:]:
		x = eval(x, fun)
		sum -= x
	return sum
Exemple #36
0
def symbol_or(fun, args):
    for x in args:
        condition = eval(x, fun)
        if condition:
            return Atom.T
    return Atom.NIL
Exemple #37
0
def symbol_star(fun, args):
	result = eval(args[0], fun)
	for x in args[1:]:
		x = eval(x, fun)
		result *= x
	return result
Exemple #38
0
def symbol_if(fun, args):
    condition = eval(args[0], fun)
    if condition:
        return Atom.evaluate(args[1], fun)
    option2 = Atom.evaluate(args[2], fun) if len(args) > 2 else Atom.NIL
    return option2
Exemple #39
0
def symbol_expt(fun, args):
	return math.pow(eval(args[0], fun), eval(args[1], fun))
Exemple #40
0
def symbol_expt(fun, args):
    return math.pow(eval(args[0], fun), eval(args[1], fun))