Czy jest coś takiego jak dopasowanie do wzorca list?SML / NJ, ale w przypadku ciągów? To, co chcę zrobić, to w końcu usunąć pierwszą literę ciągu, jeśli jest ona konkretna, a tego rodzaju rozwiązanie pojawiło się na pierwszym miejscu, więc byłbym wdzięczny, gdybym mógł to zrobić bez dalszych kłopotów, np. Przez skręcanie ciąg w formie listy i takie.
Odpowiedzi:
3 dla odpowiedzi № 1Nie bezpośrednio. Najczęstszym sposobem rozwiązania tego problemu byłoby uzyskanie wywołującego funkcję do podzielenia pierwszego znaku, tak aby można było dopasować do niego wzór.
W SML "97, ciąg znaków jest CharVector.vector (który ma podpis MONO_VECTOR). SML / NJ robi zezwalaj na dopasowywanie wzorców na wektorach (co jest niestandardowym rozszerzeniem), ale niestety nie na wektorach monomorficznych, o ile mogę to stwierdzić.
3 dla odpowiedzi № 2
String.explode
stworzy listę znaków z ciągu znaków. Dopasowanie na początku tej listy zapewni pożądaną funkcjonalność:
fun f s =
let val c = hd(String.explode s)
in
case c
of #"a" => "The character is a!"
| #"b" => "The character is b!"
| #"c" => "The character is c!"
| _ => "Not a b or c!"
end
Lista znaków sugeruje podejście parsujące stan-maszyna, a nie podobne do Perla dopasowanie do wzorca regex.