def for_macro(*tree): ret = None # for [x iter y iter] ... # -> # foreach x iter # foreach y iter # ... tree = HyExpression(tree).replace(tree[0]) it = iter(tree.pop(0)) blocks = list(zip(it, it)) # List for Python 3.x degenerating. key, val = blocks.pop(0) ret = HyExpression([HySymbol("foreach"), HyList([key, val])]) root = ret ret.replace(tree) for key, val in blocks: # x, [1, 2, 3, 4] nret = HyExpression([HySymbol("foreach"), HyList([key, val])]) nret.replace(key) ret.append(nret) ret = nret [ret.append(x) for x in tree] # we really need ~@ return root
def for_macro(*tree): ret = None # for [x iter y iter] ... # -> # foreach x iter # foreach y iter # ... tree = HyExpression(tree).replace(tree[0]) it = iter(tree.pop(0)) blocks = list(zip(it, it)) # List for Python 3.x degenerating. key, val = blocks.pop(0) ret = HyExpression([HySymbol("foreach"), HyList([key, val])]) root = ret ret.replace(tree) for key, val in blocks: # x, [1, 2, 3, 4] nret = HyExpression([HySymbol("foreach"), HyList([key, val])]) nret.replace(key) ret.append(nret) ret = nret [ret.append(x) for x in tree] # we really need ~@ return root
def let_macro(variables, *body): expr = HyExpression([HySymbol("fn"), HyList([])]) for var in variables: if isinstance(var, list): expr.append(HyExpression([HySymbol("setf"), var[0], var[1]])) else: expr.append(HyExpression([HySymbol("setf"), var, HySymbol("None")])) return HyExpression([expr + list(body)])
def let_macro(variables, *body): expr = HyExpression([HySymbol("fn"), HyList([])]) for var in variables: if isinstance(var, list): expr.append(HyExpression([HySymbol("setf"), var[0], var[1]])) else: expr.append(HyExpression([HySymbol("setf"), var, HySymbol("None")])) return HyExpression([expr + list(body)])
def let_macro(tree): tree.pop(0) # "let" ret = tree.pop(0) # vars # tree is now the body expr = HyExpression([HySymbol("fn"), HyList([])]) for var in ret: expr.append(HyExpression([HySymbol("setf"), var[0], var[1]])) for stmt in tree: expr.append(stmt) return HyExpression([expr])
def let_macro(tree): tree.pop(0) # "let" variables = tree.pop(0) # tree is now the body expr = HyExpression([HySymbol("fn"), HyList([])]) for var in variables: if isinstance(var, list): expr.append(HyExpression([HySymbol("setf"), var[0], var[1]])) else: expr.append(HyExpression([HySymbol("setf"), var, HySymbol("None")])) for stmt in tree: expr.append(stmt) return HyExpression([expr])
def let_macro(tree): tree.pop(0) # "let" variables = tree.pop(0) # tree is now the body expr = HyExpression([HySymbol("fn"), HyList([])]) for var in variables: if isinstance(var, list): expr.append(HyExpression([HySymbol("setf"), var[0], var[1]])) else: expr.append(HyExpression([HySymbol("setf"), var, HySymbol("None")])) for stmt in tree: expr.append(stmt) return HyExpression([expr])