我想写一个函数f :: a -> [a] -> [a]
,使得f a xs
是一个包含xs
中第一个等于a
的元素的列表,使得如果xs
不是以a
开头,则列表为空,具体情况会更清楚:
f 3 [3, 3, 2, 1, 3] = [3, 3]
f 3 [1, 3, 3, 2, 1, 3] = []
f 3 [1, 2, 5] = []
f "a" "aaaFS" = "aaa"
f "a" "elephant" = ""
我的问题是当找到一个值x != a
时使递归 stop,这使我认为递归本身可能不是处理这个问题的最佳方法。
换句话说,虽然很容易编写一个从xs
中获取所有a
的函数,例如f' 1 [1, 1, 2, 2, 1] = [1, 1, 1]
,但我不知道如何编写一个只从xs
中获取初始a
的函数;这是f
,使得f 1 [1, 1, 2, 2, 1] = [1, 1]
。
1条答案
按热度按时间6psbrbz91#
你可以在这里使用递归。事实上,和很多列表处理一样,你可以使用:
对于类似过滤器的函数,如下所示:
如果我们发现一个不相等的元素,你必须防止递归。我把这个作为练习。