测试一个列表是否是另一个列表的子列表而不测试元素之间的相等性

Cur*_*id7 0 algorithm recursion ocaml haskell functional-programming

我想知道是否可以编写一个函数程序(如在Haskell或OCaml中),它接受两个列表并确定第一个是否是第二个的子列表,具有程序无法调用列表元素之间相等的属性.

更一般地说,是否有这样的程序适用于任意类型的元素列表?也就是说,(在Haskell术语中)类型不必受Eq,Ord或其他东西的约束.

我问这个的原因是,当处理任意类型的元素列表时,这些元素有时不支持标准相等(对于整数,字符串等).但是,测试子列表会很有帮助.

我一直无法想到满足这种条件的实现.是否可以创建一个?

oct*_*ron 9

没有平等,这种关系is_sublist是非感性的:[x] `is_sublist` [y]当且仅当x=时,应该是真的y.相反,如果is_sublist存在这样的函数,则将等式函数定义为eq x y = [x] `is_sublist` [y].