我试图创建一个带有两个列表的函数,并检查第一个列表是否是第二个列表的开头。我有以下伪代码:
有人可以解释一个解决这个问题的好方法吗?
对于我想做的第一个伪代码语句:
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;
答案 0 :(得分:2)
使用模式匹配,但没有条件:
fun start [] l2 = true
| start l1 [] = false
| start (x::xs) (y::ys) = x = y andalso start xs ys