我在学习Python之后开始学习Haskell,我认为编写一个函数来查找一个序列中所有不在另一个序列中的项目(其中两个序列都具有可比较的元素)将是一个有趣的练习。我很容易地用Python编写了一些代码:
def inverse(seq, domain):
ss = iter(seq)
dd = iter(domain)
while True:
s = next(ss)
while True:
d = next(dd)
if d != s:
yield d
if d >= s:
break
(其中seq
和domain
都是已排序的)
然而,我尝试将这段代码转换为Haskell时遇到了困难。我认为我只需要使用列表(可以是无限的)代替ss
和dd
,并且我猜想s = next(ss)
与s = head ss
以及ss = tail ss
相同,但我不知道如何将其转换为Haskell。我也无法确定该如何处理两个while
循环。我猜想我可以使用无限递归,但由于有两个循环,我不知道是否需要两个函数或其他什么。
filter (not . (\
elem` domain)) seq的意思是:从
seq序列中过滤掉所有不属于
domain元素的内容。更简单地说,就是将
seq序列中不在
domain` 中的元素过滤掉。 - YurasData.List.(\\)
计算它们的差异。 - daniel gratzer