Кіріспе
Функционалдық бағдарламалауда берілген белгілер тізбесіндегі кейбір үлгілердің құраушыларының болуын тексеру әрекеті. Абстрактілі үлгілерді сәйкестендіру үшін өзгермелі сәйкестендіру критерийлерін қолдану. Компьютерлік ғылымда үлгі сәйкестендіру – белгілі бір үлгінің құраушыларын тексеру мақсатымен берілген белгілер тізбесін тексеру әрекеті. Үлгіні танудан өзгеше, сәйкестік көбінесе нақты болуы керек: «сәйкес келеді немесе сәйкес келмейді». Үлгілер әдетте тізбектер немесе ағаш құрылымдары түрінде болады. Үлгі сәйкестендіруді қолдануға белгілер тізбегіндегі үлгінің орналасуын анықтау (бар болса), сәйкес үлгінің кейбір бөліктерін алу және сәйкес үлгіні басқа белгілер тізбегімен алмастыру (яғни, іздеу және алмастыру) жатады. Тізбек үлгілері (мысалы, мәтіндік жол) көбінесе тұрақты өрнектер арқылы сипатталады және кері іздеу сияқты техникалармен сәйкестендіріледі. Ағаш үлгілері кейбір бағдарламалау тілдерінде деректерді құрылымына сәйкес өңдеу үшін жалпы құрал ретінде қолданылады, мысалы, C#, F#, Haskell, ML, Python, Ruby, Rust, Scala, Swift және Mathematica символдық математика тілі ағаш үлгілерін көрсету үшін арнайы синтаксис пен оларға негізделген шартты орындау және мән алу үшін тіл құрылымын ұсынады. Көбінесе, бірінен соң бірі тексерілетін баламалы үлгілерді беру мүмкін, бұл қуатты шартты бағдарламалау құралын құрайды. Үлгі сәйкестендіру кейде күзеттерді қолдауды қамтиды.
pattern matching in functional programming
the use of variable matching criteria in defining abstract patterns to match
In computer science, pattern matching is the act of checking a given sequence of tokens for the presence of the constituents of some pattern. In contrast to pattern recognition, the match usually has to be exact: "either it will or will not be a match." The patterns generally have the form of either sequences or tree structures. Uses of pattern matching include outputting the locations (if any) of a pattern within a token sequence, to output some component of the matched pattern, and to substitute the matching pattern with some other token sequence (i. e., search and replace). Sequence patterns (e. g., a text string) are often described using regular expressions and matched using techniques such as backtracking. Tree patterns are used in some programming languages as a general tool to process data based on its structure, e. g. C#, F#, Haskell, ML, Python, Ruby, Rust, Scala, Swift and the symbolic mathematics language Mathematica have special syntax for expressing tree patterns and a language construct for conditional execution and value retrieval based on it. Often it is possible to give alternative patterns that are tried one by one, which yields a powerful conditional programming construct. Pattern matching sometimes includes support for guards.
Тарих
Үлгіге сәйкес келу құрылымдары бар ерте бағдарламалау тілдеріне COMIT (1957), SNOBOL (1962), ағаш негізіндегі үлгіге сәйкес келуді қолдайтын Refal (1968), Prolog (1972), St Andrews Static Language (SASL) (1976), NPL (1977) және Kent Recursive Calculator (KRC) (1981) жатады. Көптеген мәтіндік редакторлар түрлі үлгілерді іздеуді қолдайды: QED редакторы реттегіш өрнектерді іздеуді қолдайды, ал TECO-ның кейбір нұсқалары іздеу кезінде OR операторын қолдайды. Компьютерлік алгебра жүйелері әдетте алгебралық өрнектерде үлгілерді іздеуді қолдайды.
Үлгілерді сәйкестендіру және тізбектер
Көбінесе үлгіні сәйкестендіру таңбалар тізбектерімен байланысты. Көптеген бағдарламалау тілдерінде, реттегіш өрнектерді (regular expressions) көрсету үшін белгілі бір синтаксис қолданылады, олар таңбалар тізбегін сипаттайтын үлгілер болып табылады. Дегенмен, бұл мақалада талқыланған аяқта, кейбір тізбек үлгілерін сәйкестендіруді жүзеге асыруға болады.
СНОБОЛ
SNOBOL (StriNg Oriented and symBOlic Language) – 1962 және 1967 жылдар аралығында AT&T Bell Laboratories-те Дэвид Дж. Фарбер, Ральф Э. Грисуолд және Иван П. Полонский әзірлеген компьютерлік бағдарламалау тілі. SNOBOL4 көптеген бағдарламалау тілдерінен үлгілердің бірінші дәрежелі дерек типі ретінде қарастырылуымен (яғни, оның мәндері бағдарламалау тіліндегі кез келген басқа дерек типіне рұқсат етілген барлық амалдармен өңделуі мүмкін) және үлгілерді тізбектеу және алмастыру операторларын ұсынуымен ерекшеленеді. Орындалу барысында жасалған тізбектерді бағдарлама ретінде қарастырып, орындауға болады. SNOBOL 1960-шы жылдардың соңы мен 1970-ші жылдардың басында АҚШ-тың ірі университеттерінде кеңінен оқытылып, 1970-ші және 1980-ші жылдары гуманитарлық ғылымдарда мәтінді өңдеу тілі ретінде жиі қолданылды. SNOBOL құрылғаннан бері Awk және Perl сияқты жаңа тілдер тұрақты өрнектер арқылы тізбектерді өңдеуді танымал етті. Дегенмен, SNOBOL4 үлгілері BNF грамматикасын қамтиды, олар контекстсіз грамматикаға баламалы және тұрақты өрнектерге қарағанда күштірек.