Описание тега active-pattern
Активный шаблон - это метод на языке программирования F#, который позволяет вам определять именованные разделы, которые подразделяют входные данные, так что вы можете использовать эти имена в выражении сопоставления с шаблоном так же, как и для распознаваемого объединения.
1
ответ
Как я могу передать сложное выражение параметризованному активному образцу?
Я определил активный шаблон "Выражение" следующим образом: let (|Expression|_|) expression _ = Some(expression) Сейчас я пытаюсь использовать это таким образом: match () with | Expression((totalWidth - wLeft - wRight) / (float model.Columns.Count - …
29 май '11 в 16:20
1
ответ
F# соответствует активному шаблону как расширенный кортеж
Я получаю следующую ошибку в diff с красным загогулином под Subset.Type mismatch. Expecting a Range -> Choice but given a Range * Range -> Choice Есть ли какая-то аннотация типа, которую я могу добавить к соответствию SubSet, чтобы мне не прих…
29 ноя '09 в 21:56
2
ответа
Элементы списка матчей в любом порядке
Я все еще новичок, когда дело доходит до многих областей F#. Я задаю этот вопрос больше из любопытства, чем из реальной деловой необходимости. Есть ли способ сопоставить первые n элементов в списке независимо от того, в каком порядке они отображаютс…
06 ноя '14 в 03:16
3
ответа
Карри аргументы в дискриминационных союзах
У меня есть дискриминационный союз, как это: type A = |B | C of int*A Я должен сопоставить шаблон, как это (скобки кажутся необходимыми): match x with | B -> printfn "B" | C (i,a) -> printfn "%A, %A" i a Есть ли способ вместо этого сопоставить…
26 авг '16 в 15:12
2
ответа
F# Избегайте активной перезаписи паттернов
Я заметил, что не могу создать два активных шаблона с одинаковыми параметрами, но у меня может быть два с одинаковыми без предупреждения: let (|A|B|C|) c = if (c = 'a') then A else if (c = 'b') then B else C let (|A|B|D|) c = if (c = '1') then A els…
14 ноя '14 в 14:51
2
ответа
Образец, сочетающий тип теста и литерал
Активный шаблон в этом вопросе не удается скомпилировать после обновления до VS 2012 RTM. Он предоставляет способ выполнить проверку типа и сопоставить литерал в одном шаблоне. Например: let (|Value|_|) value = match box value with | :? 'T as x ->…
16 авг '12 в 14:28
1
ответ
Проблема с активными моделями FSharp
Я анализирую цитаты из кода в FSharp и создаю шаблонные помощники. Все шло хорошо, пока я не попробовал let (|BinaryFn|_|) fn (input:Expr) = function | SpecificCall fn (_,_,l::r::[]) -> Some(l,r) | _ -> None let (|Multiply|_|) x = function | B…
12 мар '13 в 20:14
2
ответа
Почему активные шаблоны требуют специального синтаксиса?
Если обычные функции можно использовать в качестве шаблонов, это избавит от необходимости писать тривиальные активные шаблоны, такие как let (|NotEmpty|_|) s = Seq.tryPick Some s и, гипотетически, позволит let s = seq [] match s with | Seq.tryPick S…
14 ноя '11 в 18:34
1
ответ
Почему активные шаблоны ведут себя так?
Я нашел этот код в отличной книге F# Design Patterns Джин Белицкий: let (| `` I'm active pattern `` |) x = x + 2 let (`` I'm active pattern `` y) = 40 (* val ( |`` I'm active pattern ``| ) : x:int -> int val y : int = 42 *) Автор признает, что эт…
09 фев '17 в 17:07
2
ответа
Что не так с сопоставлением ActivePattern с System.Type?
module Reflection = [<RequireQualifiedAccess>] module Type = let isType<'a> = Unchecked.defaultof<'a> let (|IsEqual|Isnt|) (_:'a) (t:Type):Choice<unit,unit> = let t' = typeof<'a> if t = t' then IsEqual else Isnt let (|T…
24 авг '18 в 13:22
1
ответ
F# Частичное совпадение с образцом "Правило никогда не будет совпадать"
Учитывая следующий активный образец: let (| HasMatch |) (x:string) = if x.Contains("0") then Some() else None;; И следующий шаблон соответствия функции: let testFn x = function | HasMatch i -> printfn "%A" i | _ -> printf "nope";; Шаблон подст…
21 июл '13 в 21:30
1
ответ
Подмножество членов Союза как "параметр" в сопоставлении с образцом
Давайте определим тип для дерева с несколькими типами бинарных узлов среди других типов узлов, т.е. type Tree = | BinaryNodeA of Tree * Tree | BinaryNodeB of Tree * Tree | [Other stuff...] Я хочу манипулировать этим деревом, используя рекурсивную фу…
28 ноя '16 в 15:23
2
ответа
Разделение блоков кода в F# сопоставлении с образцом для удобства чтения
// Standard pattern matching. let Foo x = match x with | 1 -> // ... lots of code, only evaluated if x == 1 | 2 -> // ... lots of code, only evaluated if x == 2 // Standard pattern matching separated out, causing exception. let Bar x = let val…
23 июл '17 в 11:08
1
ответ
Передача частично активных шаблонов в качестве аргументов?
Я изучаю F#, написав парсер рекурсивного спуска с использованием активных шаблонов. Так как все мои правила или частичные активные шаблоны мне нужны, чтобы комбинировать их по-разному, но я действительно разочарован синтаксисом передачи активных шаб…
25 мар '14 в 13:14
1
ответ
Возможно ли сопоставить шаблон с основной формой различаемого объединения?
Поддерживает ли F# сопоставление с образцом экземпляра распознаваемого члена объединения по критериям, отличным от шаблона идентификатора? Например, представьте, что я хочу сопоставить основную форму данных и хочу рассмотреть что-либо с int * int фо…
18 дек '15 в 09:50
0
ответов
Вызов многоадресного активного шаблона напрямую
Рассмотрим один активный шаблон: let (|ToUpper|) (input : string) = input.ToUpper();; Я могу вызвать вышеупомянутый активный шаблон одного случая вне явного соответствия: let g ( ToUpper x ) =x ;; > val g : string -> string g ("hello");; > …
01 авг '14 в 15:50
2
ответа
Активные шаблоны и ограничения членов
Для встроенной функции можно создать ограничение, например: let inline implicit arg = ( ^a : (static member op_Implicit : ^b -> ^a) arg) требующий заданного оператора или члена в аргументах. Есть ли способ сопоставления, основанный на чем-то подо…
03 сен '11 в 10:59
3
ответа
Использование активных шаблонов в объявлениях различаемого типа объединения
Можно ли использовать активные шаблоны в объявлениях различного типа объединения? Чтобы быть более точным, рассмотрим следующий игрушечный пример: type T = | A of int | B let (|Negative|_|) t = match t with | A n when n < 0 -> Some () | _ ->…
12 дек '12 в 14:31
3
ответа
Неполное совпадение с шаблонами AND
Я определил структуру дерева выражений в F# следующим образом: type Num = int type Name = string type Expr = | Con of Num | Var of Name | Add of Expr * Expr | Sub of Expr * Expr | Mult of Expr * Expr | Div of Expr * Expr | Pow of Expr * Expr | Neg o…
04 авг '13 в 21:16
1
ответ
Активное сопоставление с образцами дискриминированных союзов
Есть ли способ использовать различающееся объединение следующей формы с активным сопоставлением с образцом? Я не смог найти никаких примеров. Вот что я пытаюсь сделать: type c = a | b type foo = | bar1 | bar2 of c //allowed let (|MatchFoo1|_|) aStri…
10 июн '15 в 12:01