I want to make something like it (Nemerle syntax)
def something =
match(STT)
| 1 with st= "Summ"
| 2 with st= "AVG" =>
$"$st : $(summbycol(counter,STT))"
on F# so is it real with F#?
I want to make something like it (Nemerle syntax)
def something =
match(STT)
| 1 with st= "Summ"
| 2 with st= "AVG" =>
$"$st : $(summbycol(counter,STT))"
on F# so is it real with F#?
If I understand you correctly, you'd like to assign some value to a variable as part of the pattern. There is no direct support for this in F#, but you can define a parameterized active pattern that does that:
let (|Let|) v e = (v, e)
match stt with
| Let "Summ" (st, 1)
| Let "AVG" (st, 2) -> srintf "%s ..." st
The string after Let
is a parameter of the pattern (and is passed in as value of v
). The pattern then returns a tuple containing the bound value and the original value (so you can match the original value in the second parameter of the tuple.
There is no direct support for that but you can mimic the effect like this as well:
let 1, st, _ | 2, _, st = stt, "Summ", "AVG"
sprintf "%s %a" st summbycol (counter, stt)
match
or function
keywords. I wonder whether this is an official feature? –
Sadesadella match
or function
expressions is a common misconception. Function arguments are also patterns so you can write let f((a, b), (c, d)) = ..
. This is one of the biggest advancements ML made over Lisp. –
Pericarp let 1, st, _ | 2, _, st = 1, "Summ", "AVG";;
and let 1, st, _ | 2, _, st = 2, "Summ", "AVG";;
. –
Pericarp 2
pattern with the catchall _
in the second half of the or-pattern. –
Pericarp If I understand you correctly, you'd like to assign some value to a variable as part of the pattern. There is no direct support for this in F#, but you can define a parameterized active pattern that does that:
let (|Let|) v e = (v, e)
match stt with
| Let "Summ" (st, 1)
| Let "AVG" (st, 2) -> srintf "%s ..." st
The string after Let
is a parameter of the pattern (and is passed in as value of v
). The pattern then returns a tuple containing the bound value and the original value (so you can match the original value in the second parameter of the tuple.
© 2022 - 2024 — McMap. All rights reserved.