2013-11-27 2 views
0

Я знаю суть соответствия шаблонов, где вы управляете структурами данных во время выполнения. Я знаю, что сопоставление шаблонов содержит 4 аргумента: шаблон для соответствия, выражение для соответствия, продолжение продолжения и продолжение отказа. Однако после этого, глядя на документацию по ракетке, я теряюсь. Я не понимаю конкретно (с конкретными, поэтапными, объясненными примерами), как реализовать это в коде и что с ним делать. Может кто-нибудь, пожалуйста, объясните мне туповатую версию соответствия шаблонов, возможно, с базовым кодом, который поможет мне?Объясните соответствие шаблону в Racket?

+3

Вы видели запись Руководства по сборке на [соответствие шаблону] (http://www.cs.utah.edu/plt/snapshots/current/doc/guide/match.html)? В нем есть некоторые конкретные примеры. –

ответ

3

С сопоставлением с образцом, мы хотим разорвать datastructures, поэтому мы переходим в части данных для уничтожения

(match foo 
    ...) 

Далее нам нужно указать список конструкторов попробовать foo против. Если foo был сконструирован одним из этих конструкторов, мы связываем поля foo s с указанными переменными и запускаем соответствующий блок.

(match foo 
    [(list a b) (+ a b)] 
    [_   (displayln "Hey that's not a list!")]) 

Это все! Если foo - это список из двух элементов, мы запускаем + a b, если нет, мы запускаем другое продолжение и печатаем, что foo не является списком.

3

Похоже, может быть, у вас есть школьное задание по внедрению механизма сопоставления шаблонов?

Если это так, вам может быть интересно посмотреть эту лекцию, 4A: Pattern Matching and Rule-based Substitution.

Лекция от какого-то парня, который, похоже, знает, о чем говорит. Он рассказывает о концепциях, о том, как разбить проблему на более мелкие части и даже отображает множество образцов кода.

Смежные вопросы