Я люблю писать на Python. Решил, как говорится, just for fan, сделать на Python что-то вроде простейшего Pattern Matching в стиле Erlang (так как недавно начал заниматься эрлангом и проникся)). Есть одна проблема. Не знаю как сделать это красиво, так, чтобы было pythonic. ) Не придумал ничего лучше, чем как-то так:
class PFPM(object):
def __init__(self, name):
self._name = name
self._clauses = []
self._cur = 0
def __call__(self, *fpars):
# parse, execute
return None #and return result
def match(self, *pars):
self._clauses.append({"match": pars})
self._cur += 1
return self
def where(self, guard):
self._clauses[self._cur]["guard"] = guard
return self
def func(self, *exprs):
self._clauses[self._cur]["funcs"] = exprs
return self
def max_of_list(numlist):
fmax = PFPM("fmax") # Далее, как это все выглядит:
fmax.match("[H|T]").func("fmax(T,H)")
fmax.match("[H|T]","N").where("H>N").func("fmax(T,H)")
fmax.match("[_|T]","N").func("fmax(T,N)")
fmax.match("[]","X").func("X")
return fmax(numlist)
print max_of_list([3,1,2,6,4,5])
может кто-нибудь подскажет, предложит более «сахарный» путь…