В настоящее время я изучаю SML / NJ из-за программы, которая в основном использует gui для ввода c, но ввод SML для расширенных параметров. Я хочу сравнить, является ли одна строка подстрокой другой. Если условие истинно, тогда полная строка должна «просто» быть возвращена или присвоена новой переменной. В целях тестирования я использовал онлайн-компилятор, потому что я получаю почти нулевую обратную связь от другой программы.
Соответствующий фрагмент кода:
fun SString(sub:string, str:string):string =
if isSubstring(sub, str) = TRUE then str
(* str should be returned , no errors*)
else val p2:string="nope";
(* no return or adjustable(fixed)return /without data*)
val p1 = "sender,time,data"
val p2 = "sender"
print(SString(p2,p1))
Пока я застрял.
Мои основные вопросы:
Могу ли я на самом деле создать новую переменную в функции?
Какова наилучшая практика в этом случае?
В некоторых онлайн-документах я читал, что невозможно присвоить новое значение переменной после ее назначения. Должна ли моя функция иметь следующую форму с внутренними привязками и let decl in expr end *var
?
fun newstr:string(sub:string,str:string) =
let val n = isSubstring(sub,str)
in
end *sub
Заранее спасибо
Соответствующие результаты компиляции:
Standard ML of New Jersey v110.78 [built: Thu Aug 31 03:45:42 2017]
- stdIn:4.33-4.44 Error: syntax error: deleting ELSE VAL ID
- stdIn:4.52-4.61 Error: syntax error: deleting EQUALOP STRING SEMICOLON
PS Я добавил подходящие теги, не стесняйтесь удалять / настроить их