W co najmniej niektórych językach rodziny ML można zdefiniować rekordy, w których można wykonać dopasowywanie wzorców, np. http://learnyouahaskell.com/making-our-own-types-and-typeclasses - podstawową ideą jest zdefiniowanie typu rekordu z nazwanymi polami, konstruktor jest automatycznie tworzony z tymi polami jako parametrami, dzięki czemu można tworzyć rekordy tego typu, a ekstraktor jest automatycznie tworzony z tymi polami jako parametrami, dzięki czemu można uzyskać wzór dopasuj do rekordów tego typu.Tylko język Scala z przeciążonymi ekstraktorami?
Scala idzie o krok dalej i pozwala oddzielić od siebie pola przechowywane w rekordzie, parametry konstruktora i parametry ekstraktora, np. http://daily-scala.blogspot.com/2009/11/overloaded-unapply.html - w tym jest realizacja celu polegającego na wspieraniu programowania obiektowego i funkcjonalnego. (Języki zorientowane obiektowo oczywiście pozwalają na oddzielenie przechowywanych pól i parametrów konstruktora, chociaż zwykle nie posiadają ekstraktorów.)
Czy istnieją inne języki, które mają dopasowanie do wzorca i umożliwiają takie oddzielenie?
Czy napisano coś o zaletach i wadach takiego oddzielenia?
Haskell jest językiem rodzina ML? – millimoose
Nigdy ich nie używam, ale widoki Haskella są podobne – Owen
Oczywiście, języki dynamiczne, takie jak Scheme, pozwalają na to bez wsparcia językowego, ale nie wiem, czy ktokolwiek z nich korzysta – Owen