Выполнить запрос с помощью C # [закрыто]

Есть и другие хорошие ответы, поэтому я дам вам очень технический ответ. Соответствие шаблонов - это конструкция исключения для алгебраических типов данных :

  • «Конструкция исключения» означает «как потреблять или использовать значение»
  • «Алгебраический тип данных», в дополнение к первоклассным функциям, является большой идеей в статически типизированном функциональном языке, таком как Clean, F #, Haskell или ML

Идея алгебраических типов данных заключается в том, что вы определяете тип вещи, и вы говорите все способы, которыми вы можете это сделать. В качестве примера давайте определим «Последовательность String» как тип алгебраических данных с тремя способами:

data StringSeq = Empty                    -- the empty sequence
               | Cat StringSeq StringSeq  -- two sequences in succession
               | Single String            -- a sequence holding a single element

Теперь, с этим определением есть все, что не так, но как Например, это интересно, потому что оно обеспечивает конкатенацию последовательностей произвольной длины в постоянное время. (Есть и другие способы достижения этого.) В декларации представлены Empty, Cat и Single, все из которых существуют , создающие последовательности . (Это делает каждый из них введение construct & mdash; способ сделать вещи.)

  • Вы можете сделать пустую последовательность без каких-либо других значений.
  • Чтобы сделать последовательность с Cat, вам понадобятся две другие последовательности.
  • Чтобы сделать последовательность с Single, вам нужен элемент (в этом случае строка)

Здесь идет строка перфорации: конструкция исключения, сопоставление шаблонов, дает вам способ тщательно изучить последовательность и задать вопрос о том, какой конструктор вы создали? Поскольку вы должны быть готовы к любому ответу, вы предоставляете по крайней мере одну альтернативу для каждого конструктора. Вот функция длины:

slen :: StringSeq -> Int
slen s = case s of Empty -> 0
                   Cat s s' -> slen s + slen s'
                   Single _ -> 1

В основе языка все шаблонные сопоставления построены на этой конструкции case. Однако, поскольку алгебраические типы данных и сопоставление образцов настолько важны для идиом языка, существует специальный «синтаксический сахар» для выполнения сопоставления шаблонов в форме объявления определения функции:

slen Empty = 0
slen (Cat s s') = slen s + slen s'
slen (Single _) = 1

С помощью этого синтаксический сахар, вычисление путем сопоставления шаблонов во многом напоминает определение уравнениями. (Комитет Haskell сделал это специально.) И, как вы можете видеть в других ответах, можно выделить либо уравнение, либо альтернативу в выражении case, похлопывая охрану с ним. Я не могу придумать правдоподобного стража для примера последовательности, и в других ответах есть много примеров, поэтому я оставлю его там.

-11
задан gunr2171 2 June 2014 в 17:09
поделиться