【问题标题】:Should the patterns in a SML match expression have the same type?SML 匹配表达式中的模式是否应该具有相同的类型?
【发布时间】:2023-03-08 15:21:01
【问题描述】:

在 Ullman 的 SML 书中:

一个匹配表达式由一个或多个规则组成,它们是一对 表格

<pattern> => <expression>

规则用竖线分隔,所以匹配的形式是:

<pattern 1> => <expression 1> |
<pattern 2> => <expression 2> |
<pattern n> => <expression n>

=> 后面的每个表达式必须是同一类型, 因为其中任何一个都可能成为匹配的值。

匹配表达式表达式中的模式(因此它们具有类型)吗?

匹配表达式中的模式也应该具有相同的类型吗?

特别是当匹配表达式用于定义函数时,例如

val rec f = fn P1 => E1 | P2 => E2 | ... | Pn => En;

匹配表达式中的模式也应该具有相同的类型吗? (我猜是的,因为函数的参数是有类型的,我们不能给同一个参数不同类型的参数。)

谢谢。

【问题讨论】:

    标签: functional-programming pattern-matching programming-languages sml ml


    【解决方案1】:

    是的,就像表达式一样,模式也有类型。并且匹配中不同模式的类型必须相同。

    对于case,模式类型也必须与scrutinee表达式的类型相同。对于函数,模式类型是函数的参数类型。

    【讨论】:

    • 谢谢。模式不是表达式吗?这些是什么?我以为只有表达式可以有类型。
    • 模式就是模式。它们是与表达式不同的句法类别(其结构主要反映表达式的子集)。类型可以分配给许多短语。例如,在 ML 中,模块也有类型,尽管它们通常被称为签名并且不同于值的类型。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-05-21
    • 2010-12-20
    • 1970-01-01
    • 2021-06-01
    • 2013-11-25
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多