Replacement for lambda - 'def' as an expression?
talin at acm dot org
viridia at gmail.com
Tue Sep 6 22:35:50 CEST 2005
I like the decorator idea. Unfortunately, the version of Python I am
using is pre-decorator, and there are various issues involved in
upgrading on Mac OS X (due to the built-in Python 2.3 being used by the
OS itself.) I'll have to look into how to upgrade without breaking too
Some further examples of what I am trying to do. First let me state
what my general goal is: There are lots of inference engines out there,
from Prolog to Yacas, but most of them rely on a custom interpreter.
What I want to find out is if I can build a solver, not by creating a
new language on top of Python, but rather by giving solver-like
capabilities to a Python programmer. Needless to say, this involves a
number of interesting hacks, and part of the motivation for my
suggestion(s) is reducing the hack factor.
So, at the risk of being visited by Social Services for my abuse of
Python Operators, here's a sample of how the sovler works:
# Define a function with multiple arities
Simplify = Function()
# Define some arities. We overload __setitem__ to define an arity.
# Param is a class who'se metaclass defines __getattr__ to return a new
# of Param with the given parameter name.
Simplify[ ( add, Param.x, 0 ) ] = lamba x: return Simplify( x ) # x
+ 0 = x
Simplify[ ( mul, Param.x, 1 ) ] = lamba x: return Simplify( x ) # x
* 1 = x
Simplify[ ( mul, Param.x, 0 ) ] = lamba x: return 0 #
x * 0 = 0
Simplify[ Param.x ] = lamba x: return x
# Fallback case
# Invoke the function. Should print the value of x
print Simplify( (add, x, 0) )
Of course, what I really want is not def or lambda, what I really want
is to be able to define functions that take suites as arguments. But
that would be crazy talk :)
Define( "Simplify", args ):
More information about the Python-list