模式匹配用到的类型系统类似 ts。
from pattern_matching.core.match import when, overwrite
from pattern_matching import var, Using
from numpy.random import randint
with Using(scope=locals(), use_tco=True):
@overwrite((var, *var))
def qsort(head, tail):
lowers = [i for i in tail if i < head]
highers = [i for i in tail if i >= head]
return qsort(lowers) + [head] + qsort(highers)
@when(var)
def qsort(lst):
return lst
print(qsort(randint(0, 2000, size=(1200, ))))
from pattern_matching import Match, when, var, T, t, match_err, _, overwrite
@overwrite(_ == 1, var[int])
def u_func(res):
return res
@when(var < 0, _)
def u_func():
raise varueError('input should be positive.')
@when(var[int] > 1, var)
def u_func(now, res):
return u_func(now-1, res*now)
@when(var[int])
def u_func(now):
return u_func(now, 1)
u_func(10, 1) # => 3628800
大哥哥们有什么看法吗?
这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。
V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。
V2EX is a community of developers, designers and creative people.