/ Dopasowywanie wzorców smyczkowych / SML / NJ - ciąg, dopasowywanie wzorców, sml, smlnj

Dopasowywanie wzorca ciągu SML / NJ - ciąg, dopasowywanie wzorców, sml, smlnj

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 № 1

Nie 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.