[Python-ideas] How do you think about these language extensions?
王宣 ?
twshere at outlook.com
Sun Aug 13 08:49:45 EDT 2017
Hi all,
I've just finished a language extension for CPython 3.6.x to support some additional grammars like Pattern Matching. And It's compatible with CPython.
I'm looking for constructive advice, and I wonder if you will be interested in this one.
( the project address is https://github.com/thautwarm/flowpython)
[https://avatars1.githubusercontent.com/u/22536460?v=4&s=400]<https://github.com/thautwarm/flowpython>
thautwarm/flowpython<https://github.com/thautwarm/flowpython>
github.com
flowpython - tasty feature extensions for python(python3).
Some examples here:
# where syntax
from math import pi
r = 1 # the radius
h = 10 # the height
S = (2*S_top + S_side) where:
S_top = pi*r**2
S_side = C * h where:
C = 2*pi*r
# lambda&curry :
lambda x: lambda y: lambda z: ret where:
ret = x+y
ret -= z
.x -> .y -> .z -> ret where:
ret = x+y
ret -= z
as-with x def as y def as z def ret where:
ret = x+y
ret -= z
# arrow transform (to avoid endless parentheses and try to be more readable.
>> range(5) -> map(.x->x+2, _) -> list(_)
>> [2,3,4,5,6]
# pattern matching
# use "condic" as keyword is for avoiding the conflictions against the standard libraries and packages from third party. "switch" and "match" both lead to conflictions.
condic+(type) 1:
case a:int => assert a == 1 and type(a) == 1
[>]
case 0 => assert 1 > 0
[is not]
case 1 => assert 1 is not 1
otherwise => print("nothing")
condic+() [1,2,3]:
case (a,*b)->b:list => sum(b)
+[]
case [] => print('empty list')
+[==]
case (a,b):(1,2) => print("the list is [1,2]")
The grammars with more details and examples can be found in
https://github.com/thautwarm/flowpython/wiki
Does it interest you? If so, you can try it if you have CPython 3.6.x.
pip install flowpython
python -m flowpython -m enable/disable
Here is an example to use flowpython, which gives the permutations of a sequence.
from copy import deepcopy
permutations = .seq -> seq_seq where:
condic+[] seq:
case (a, ) => seq_seq = [a,]
case (a, b) => seq_seq = [[a,b],[b,a]]
case (a,*b) =>
seq_seq = permutations(b) -> map(.x -> insertAll(x, a), _) -> sum(_, []) where:
insertAll = . x, a -> ret where:
ret = [ deepcopy(x) -> _.insert(i, a) or _ for i in (len(x) -> range(_+1)) ]
If the object permutations are defined, try these codes in console:
>> range(3) -> permutations(_)
>> [[0, 1, 2], [1, 0, 2], [1, 2, 0], [0, 2, 1], [2, 0, 1], [2, 1, 0]]
Does it seem to be interesting?
Thanks,
Thautwarm
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://mail.python.org/pipermail/python-ideas/attachments/20170813/30eb7a1f/attachment.html>
More information about the Python-ideas
mailing list