【发布时间】:2019-06-27 01:41:29
【问题描述】:
我正在尝试编写一个函数subset,它接受两个列表并确定第一个列表的元素是否出现在第二个列表中。
当输入如下函数时,代码编译到 GHCi,但不运行(即卡住):
subset [1,2] [1,2]
这是我的代码:
subset :: (Eq a) => [a] -> [a] -> Bool
subset [] ys = True
subset (x:xs) ys
| elem x ys = subset (x:xs) ys
| otherwise = False
谢谢!
【问题讨论】:
-
也许感兴趣:您不需要像那样显式地在
elem x ys上进行分支。你可以subset (x:xs) ys = elem x ys && subset {- ... see answers below ... -} ys和懒惰将确保递归调用只在需要时发生。
标签: haskell recursion set subset infinite-loop