【发布时间】:2015-06-20 17:32:44
【问题描述】:
我正在尝试在 ML (SML/NJ) 中编写一个函数来检查一个值是否是一个列表。
fun is_list [] = true | is_list (h::t) = true | is_list _ = false;
我希望 is_list 函数是一个 'a -> bool 函数。相反,我得到一个匹配冗余错误。这是为什么?以及函数应该怎么写?
谢谢!
【问题讨论】:
标签: polymorphism sml ml
我正在尝试在 ML (SML/NJ) 中编写一个函数来检查一个值是否是一个列表。
fun is_list [] = true | is_list (h::t) = true | is_list _ = false;
我希望 is_list 函数是一个 'a -> bool 函数。相反,我得到一个匹配冗余错误。这是为什么?以及函数应该怎么写?
谢谢!
【问题讨论】:
标签: polymorphism sml ml
ML 是一种类型化语言。你不能写这样的函数。如果您觉得需要它,那么您就是从错误的方向解决问题。 ML 在运行时区分不同情况的唯一方法是使用数据类型(如果您需要在程序的某些部分允许异构类型,您可以定义自己的数据类型)。
另请参阅my reply 的类似问题,了解为什么此限制是一项功能。
【讨论】: