Я очень новичок в SML и имею некоторый фон в C/C++. Я пытаюсь написать функцию с именем reverseString, которая получает строку для изменения. Довольно просто. Используя вспомогательную функцию, я смог написать функцию, которая меняет любую заданную строку с добавлением дополнительного символа к результату. Например:Идеи для обратных строк в SML
- reverseString("hello");
val it = "ollehh" : string
Любая помощь в том, как преодолеть это препятствие будет чрезвычайно полезна. Пожалуйста, имейте в виду, что я пытаюсь реализовать функцию без каких-либо дополнительных функций (то есть функции, которые не были использованы в моей сломанной реализации):
fun reverseAux(s:string, i:int) : string =
if i = 0 then str(String.sub(s, 0))
else str(String.sub(s, i-1))^reverseAux(s, i-1);
fun reverseString(s:string) : string =
reverseAux(s, size(s));
Простейшая модификация для достижения функциональности, которую вы ищете, заключается в изменении 'i = 0' на' i = 1' или путем изменения 'size (s)' to 'size (s) -1' –
' String.sub (s, 0) 'встречается дважды в результате, хотя один из времен он замаскирован под« String.sub (s, i-1) », когда« i »равен 1. – molbdnilo
Спасибо, Кевин и Мольбнило. Это то, что я искал. Использование рекурсии для изменения строки привело меня в замешательство ... –