检查列表1的功能是列表2的开头

时间:2015-10-27 21:26:17

标签: list sml tail head smlnj

我试图创建一个带有两个列表的函数,并检查第一个列表是否是第二个列表的开头。我有以下伪代码:

  • 空列表开始列表
  • 列表不会启动空列表
  • 如果列表与第二个列表的头尾相同,则列表会启动第二个列表

有人可以解释一个解决这个问题的好方法吗?

对于我想做的第一个伪代码语句:

fun starts [] l2 = false |
    starts l1 [] = false |
    starts l1 l2 = if ((hd(l1) = (hd(l2) andalso (tl(l1) = (tl(l2)) then true 

我不完全确定如果第二个列表尾部长于第一个列表尾部,这是否会起作用?会发生错误吗?

如果有人可以帮助解释甚至找到解决方案,那就太棒了!

编辑:

找到了一种方法,我不认为我太离谱了。

Fun start [] l2 = true |
start l1 [] = false |
start l1 l2 = if (hd(l1)) = (hd(l2)) then (start (tl(l1)) (tl(l2))) else false;

1 个答案:

答案 0 :(得分:2)

使用模式匹配,但没有条件:

fun start [] l2 = true 
  | start l1 [] = false 
  | start (x::xs) (y::ys) = x = y andalso start xs ys