LINUX.ORG.RU

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

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

я-то понял, что написал, хотя ошибки не исключены. Общая идея такова: да, хорошо встроить сторожа прямо в шаблон, например, в таком случае:

(match '(1 . "test")
  ((cons _ (guard x (stringp x))) (print x)))
Но если сторож относится ко всему результату сопоставления, то в общем-то сторож и само сопоставление с образцом становятся между собой ортогональны, и их желательно отделить друг от друга. Я бы хотел что-то типа того:
(match '(1 . "test") ; этот код не работает
  ((cons x "test")
   (cond 
     ((numberp x) (делай-раз))
     ((stringp x) (делай-два))
     (t (перейти-к-следующему-образцу-для-сопоставления))))
  ((cons x y)
     ...))
Так понятнее? И к тебе такой вопрос: насколько интенсивно пользуешься pattern matching и в каких языках?

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

я-то понял, что написал, хотя ошибки не исключены. Общая идея такова: да, хорошо встроить сторожа прямо в шаблон, например, в таком случае:

(match '(1 . "test")
  ((cons _ (guard x (stringp x))) (print x)))
Но если сторож относится ко всему результату сопоставления, то в общем-то сторож и само сопоставление с образцом становятся между собой ортогональны, и их желательно отделить друг от друга. Я бы хотел что-то типа того:
(match '(1 . "test") ; этот код не работает
  ((cons x "test")
   (cond 
     ((numberp x) (делай-раз))
     ((stringp x) (делай-два))
     (t перейти-к-следующему-шаблону)))
  ((cons x y)
     ...))
Так понятнее? И к тебе такой вопрос: насколько интенсивно пользуешься pattern matching и в каких языках?