【问题标题】:SML how to change String after isSubstring comparisonSML如何在isSubstring比较后更改String
【发布时间】:2020-08-18 22:56:10
【问题描述】:

我目前正在学习 SML/NJ,因为该程序主要使用 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 

附:我添加了合适的标签,请随意删除/调整它们

【问题讨论】:

标签: string substring sml smlnj


【解决方案1】:

一个温和的 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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2023-03-21
    • 2010-09-18
    • 1970-01-01
    • 2020-09-28
    • 1970-01-01
    • 1970-01-01
    • 2019-01-30
    • 1970-01-01
    相关资源
    最近更新 更多