def _compile(fun, actual_fun=None): if actual_fun is None: actual_fun = fun args, vargs, kwargs, defaults = inspect.getargspec(actual_fun) if vargs or kwargs or defaults: source = inspect.getsource(actual_fun) raise SyntaxError('Unsupported signature: {}'.format(source)) symbolic_args = map(NVAR, args) symbolic_result = fun(*symbolic_args) LOG.debug('compiling {}{} = {}'.format( fun, tuple(symbolic_args), symbolic_result)) code = as_code(symbolic_result) for var in reversed(symbolic_args): code = abstract(var, code) return code
def _compile(fun, actual_fun=None): """Convert lambdas to terms using Higher Order Abstract Syntax [1]. [1] Pfenning, Elliot (1988) "Higher-order abstract syntax" https://www.cs.cmu.edu/~fp/papers/pldi88.pdf """ if actual_fun is None: actual_fun = fun args, vargs, kwargs, defaults = inspect.getargspec(actual_fun) if vargs or kwargs or defaults: source = inspect.getsource(actual_fun) raise SyntaxError('Unsupported signature: {}'.format(source)) symbolic_args = map(NVAR, args) symbolic_result = fun(*symbolic_args) LOG.debug('compiling {}{} = {}'.format( fun, tuple(symbolic_args), symbolic_result)) term = as_term(symbolic_result) for var in reversed(symbolic_args): term = convert.FUN(var, term) return term