如何检查一个值是否是 ML 中的列表?

How to check if a value is a list in ML?

我正在尝试用 ML (SML/NJ) 编写一个函数来检查值是否为列表。

fun is_list [] = true | is_list (h::t) = true | is_list _ = false;

我希望 is_list 函数是一个 'a -> bool 函数。相反,我得到了匹配冗余错误。这是为什么?还有函数应该怎么写?

谢谢!

ML 是一种类型化语言。你不能写这样的函数。如果您觉得需要它,那么您就从错误的方向来解决问题。在 ML 中区分运行时不同情况的唯一方法是使用 datatypes(如果您需要在程序的某些部分允许异构类型,您可以定义自己的数据类型)。

另请参阅 my reply 类似问题,了解为什么此限制是一项功能。