У Clojure проблему батарей дужок можна дещо зменшити, використовуючи макроси -> та ->> — при бажанні, їх можна реалізувати й для Common Lisp чи Scheme. Python, якщо писати на ньому код у функціональному стилі, теж схильний до появи ліспівських батарей — свого часу, звикши до зручностей ФП у Clojure, я спробував реалізувати аналоги кложурних стрілок і для пітона, але на практиці майже не користувався цими протезами.
def larg(x):
return lambda *args, **kwargs:\
larg(args[0](x, *args[1:], **kwargs)) if args else x
def rarg(x):
return lambda *args, **kwargs:\
rarg(args[0](*args[1:]+(x,), **kwargs)) if args else x
Приклад використання:
print( rarg('qwertyuiop')(filter, lambda c:c<'q')(map, repr)(', '.join)())
Має працювати як
print(', '.join(map(repr, filter(lambda c:c<'q', 'qwertyuiop'))))
Хоча можна обійтися й без псевдомакроса, з таким же результатом:
x='qwertyuiop'
x=filter(lambda c:c<'q', x)
x=map(repr, x)
x=', '.join(x)
print(x)