一个很酷的函数式编程工具。函数可以直接用可用于类型测试的定义域来操作。
fcool的Python项目详细描述
简介
摘要
一个很酷的函数式编程工具。操作数学中的函数。类型测试是以一种很糟糕的方式实现的。
关键词
功能编程,类型测试
功能:
- function with domain, the domain can be used to type testing
- operator on functions, for example, f + g: x -> f(x) + g(x) where f, g, f+g are functions
- to glue functions with glue function or method that can be used to define piecewise functions
- no 3rd part requirement
- implement memoization in oo way.
- use MathFunction for math functions where keyword arguments are deprecated. (new in this version)
内容
课程:
BaseFunction -> Type (or Domain), Function BaseFunction: func: function (or number) Function: func, domain: Type, the definition domain of func
功能:
Interval(a:num, b:num) -> Type restrict(t:Type) -> decorator(f:function -> Function(f, t))
常数:
TURE, FALSE(Type) represent universal set, empty set
语法
基本语法
导入:
import fcool (or from fcool import *)
用域定义函数:
F = Function(lambda x:x, Type(lambda x:x>2)) F(3)
函数上的运算符:
(F + F)(3) (F * F)(4) (2 * F)(3)
二维函数和类型:
f = 3 # or lambda x,y: 3 g = lambda x,y: 2/x t = Type(lambda x:x<5 and isinstance(x, int)) * TRUE # define type(domain) and functions on it <=> Type(lambda x, y:x<5) & Type(lambda x, y:isinstance(x, int)) G = Function(g, t) F = Function(f, t)
备忘录:
f.memoize() # f is the object of BaseFunction f.unmemoize() # prohibit to use memo (memo is not deleted) f.del_memo() # just clear the memo, will update the memo in next time f.forget() # f.del_memo() and f.unmemoize()
高级语法
粘合功能:
print(G.glue(F)(3,4), glue(G, F)(3,4)) # glue functions ID = Function(lambda x:x) print(ID.compose(F)(3,4)) # composition
使用restrict decorator进行类型测试:
@restrict(Interval(1,2)) # restriction decorator def f(x): return x print(f(1)) try: print(f(3)) except Exception as ex: print(ex) G=Function(lambda x:x) print(G(3)) G = G | Interval(1,2) # restriction method print(G(3))