【问题标题】:how do you do pattern matching is Standard ML?你如何做模式匹配是标准 ML?
【发布时间】:2019-08-13 14:25:16
【问题描述】:

我想使用模式匹配编写以下过程:

fun sub1 ns = if null ns then []
          else (hd ns) :: (sub1 (tl ns));

nullhdtl 分别是:

fun null [] = true
  | null (_::_) = false;

fun hd (x::_) = x;

fun tl (_::xs) = xs;

到目前为止,我已经尝试过:

fun sub1.2 [] = []
  | sub1.2 (n::ns) = n :: sub1.2 ns;

以上行不通。我收到以下语法错误:

2.1.sml:6.10 Error: syntax error: inserting  ASTERISK
2.1.sml:7.10 Error: syntax error: inserting  ASTERISK
2.1.sml:7.33 Error: syntax error: inserting  EQUALOP

同样,你如何使用模式匹配编写sub1?谢谢!

【问题讨论】:

  • 你能详细说明它是如何不起作用的吗?
  • @ScottHunter 我添加了我遇到的语法错误。
  • 尝试删除/替换函数名中的小数点。
  • @ScottHunter 谢谢;成功了!

标签: sml


【解决方案1】:

名称中不允许使用小数点;您必须删除或替换它们。

【讨论】:

    【解决方案2】:

    既然你设法找到了解决方案,请尝试看看你是否可以使用模式匹配重写以下内容:

    fun merge (xs, ys) =
        if null xs orelse null ys
        then []
        else (hd xs, hd ys) :: merge (tl xs, tl ys)
    
    val example = merge ([1,2,3], [4,5,6])  (* [(1,4), (2,5), (3,6)] *)
    

    您可能需要多个基本案例,但它们可能看起来非常相似。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-04-06
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-10-05
      • 2015-04-05
      • 1970-01-01
      相关资源
      最近更新 更多