我目前正在学习SMLNJ,因为一个程序,基本的输入主要用gui,但高级选项用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
P.S. 我加了一些标签,请随时删除调整它们
温柔的《ML入门》让我对SML有了很大的了解,除了一些暗码和类型转换。
val p1:string = "weather,maps,translate";
val p2:string = "maps";
fun SString(sub:string, str:string) = let
in case (String.isSubstring sub str) of
(true) => str ^ ",pie"
| (_) => "nope"
end;
val a = SString(p2,p1);
val b = String(p1,p2);
以上代码的执行结果。
Standard ML of New Jersey v110.78 [built: Thu Aug 31 03:45:42 2017]
- val p1 = "weather,maps,translate" : string
val p2 = "maps" : string
[autoloading]
[library $SMLNJ-BASIS/basis.cm is stable]
[autoloading done]
val SString = fn : string * string -> string
val a = "weather,maps,translate,pie" : string
val b = "nope" : string