SML如何在比较isSubstring后改变字符串。

问题描述 投票:0回答:1

我目前正在学习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))

到目前为止,我被卡住了

我的主要问题是。

  1. 我可以在一个函数中创建一个新的变量吗?

  2. 在这种情况下,最好的做法是什么?

  3. 在一些在线文档中,我读到,一旦分配了一个变量,就不可能再分配一个新的值。 我的函数是否应该有以下的形式,内部绑定和 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. 我加了一些标签,请随时删除调整它们

string substring sml smlnj
1个回答
0
投票

温柔的《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
© www.soinside.com 2019 - 2024. All rights reserved.