Я делаю функцию, которая повторяется по строке и заменяет каждый экземпляр пользовательского символа.
Функция, которая соответствует этому описанию, String.map
. Пример:
- String.map (fn c => if c = #"l" then #"k" else c) "hello";
> val it = "hekko" : string
Поскольку эта функция не может удалять символы, это говорит о том, что «заменить» является неоднозначным словом.
Я хотел бы знать, что означает эта ошибка для моя программа и что я могу делать неправильно.
Error: operator and operand do not agree [tycon mismatch]
operator domain: string * string
operand: char * 'Z
Venkate sh - Прасад Ранганатх уже ответил на это и показал, как это исправить.
Поэтому вместо этого я покажу альтернативный способ реализовать это.
Это мой код:
fun remCharR(expr, letter) =
if String.sub(expr, 0) = letter
then remCharR(String.substring(expr, 0, 1), letter)
else String.sub(expr, 0) ^ remCharR(String.substring(expr, 0, 1), letter);
Поскольку единственной задачей этой функции является удаление символов, используйте String.translate
:
fun remChar (c1, s) =
String.translate (fn c2 => if c1 = c2 then "" else str c2) s