LINUX.ORG.RU

История изменений

Исправление loz, (текущая версия) :

Но если сторож относится ко всему результату сопоставления

Сторож это просто форма которая может использовать символы из сопостовления первой формы.

То что ты хочешь сделать можно легко написать макросом который будет трансформироваться в вызов оптимы, из

(match '(1 . 5)
          ((my-guard (cons _ x) 
               ((numberp x) (1+ x))
               ((stringp x) (format nil "1+~a" x)))))
в
(match '(1 . 5)
          ((guard (cons _ x) (numberp x)) (1+ x))
          ((guard (cons _ x) (stringp x)) (format nil "1+~a" x)))

насколько интенсивно пользуешься pattern matching и в каких языках?

Только в эрланге пользовался, он там повсюду, потому что в нем паттерн матчинг реально полезен, в других языках на которых я пишу это максимум `a, b = pair`. Аналог лиспового паттерн матчинга (почти) никуда не завезли, потому что цитирования и макросистемы нигде нет, сам понимаешь.

Исходная версия loz, :

Но если сторож относится ко всему результату сопоставления

Сторож это просто форма которая может использовать символы из сопостовления первой формы.

То что ты хочешь сделать можно легко написать макросом который будет трансформироваться в вызов оптимы, из

(match '(1 . 5)
          ((my-guard (cons _ x) 
               ((numberp x) (1+ x))
               ((stringp x) (format nil "1+~a" x)))))
в
(match '(1 . 5)
          ((guard (cons _ x) (numberp x)) (1+ x))
          ((guard (cons _ x) (stringp x)) (format nil "1+~a" x)))

насколько интенсивно пользуешься pattern matching и в каких языках?

Только в эрланге пользовался, потому что в нем паттерн матчинг реально полезен, в других языках на которых я пишу это максимум `a, b = pair`. Аналог лиспового паттерн матчинга (почти) никуда не завезли, потому что цитирования и макросистемы нигде нет, сам понимаешь.