LambdaPython
LambdaPython is Python, but if your program includes def
, it raises a syntax error (that means you must use built-in functions or lambda functions instead of normal ones, thus the name). It is named by User:None1 and inspired by UnnumericJS which is inspired by MangularJS.
Examples
Most programs are the same (as Python), but here is an example that computes the n-th Fibonacci number using recursion (reads n and outputs the n-th Fibonacci number):
exec('\x64\x65\x66\x20\x66\x69\x62\x28\x6e\x29\x3a\x0a\x09\x69\x66\x20\x6e\x3d\x3d\x30\x3a\x0a\x09\x09\x72\x65\x74\x75\x72\x6e\x20\x30\x0a\x09\x69\x66\x20\x6e\x3d\x3d\x31\x3a\x0a\x09\x09\x72\x65\x74\x75\x72\x6e\x20\x31\x0a\x09\x72\x65\x74\x75\x72\x6e\x28\x66\x69\x62\x28\x6e\x2d\x31\x29\x2b\x66\x69\x62\x28\x6e\x2d\x32\x29\x29\x0a\x70\x72\x69\x6e\x74\x28\x66\x69\x62\x28\x69\x6e\x74\x28\x69\x6e\x70\x75\x74\x28\x29\x29\x29\x29')
Athough it uses recursion, it does not include def
, so it is still allowed.
Alternatively, every def
can be transformed into a lambda
. The above Fibonacci function can be expressed as:
f = lambda n: 0 if n == 0 else 1 if n == 1 else f(n - 1) + f(n - 2)
Here is a lambda-only version of an iterative Fibonacci function which doesn't use recursion:
f = lambda i, l=[0, 1]: [l.append(l[-1] + l[-2]) for _ in range(i + 1 - len(l))] and l[i]
Interpreter in Python
import sys code=sys.stdin.read() if 'def' in code: raise Exception('Syntax error') else: exec(code)
Self interpreter
import sys code=sys.stdin.read() if '\x64\x65\x66' in code: raise Exception('Syntax error') else: exec(code)
This is also an interpreter in Python.
Turing completeness
We can use exec()
and the hexadecimal escape to run any Python code, so it is Turing complete.