gpt4 book ai didi

python - 这段 Python 代码的 Haskell 等价物

转载 作者:太空狗 更新时间:2023-10-29 21:46:29 24 4
gpt4 key购买 nike

我正在学习 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

(其中 seqdomain 都已排序)

但是,我很难将这段代码转换成 Haskell。我假设我只是使用列表(可能是无限的)而不是 ssdd,我想我会使用 s = next(ss) s = head ssss = tail ss 相同,但我不知道如何将其转换为 Haskell。我也不知道我将如何处理这两个 while 循环。我想我可以使用无限递归,但由于有两个循环,我不知道是否需要两个函数或什么。

最佳答案

我无法完全让您的代码像宣传的那样工作,但我认为这段代码的工作方式应该与您的代码大致相同,前提是两个假设:X 和 Y 已排序,并且所有元素都是唯一的。

我们想从 xx 中删除 yy 中的所有元素。在此过程中的每一步,我们只需要比较每个元素的第一个元素(xy,在函数定义中)。然后可能会发生三件事:

  • x小于y,也就是说x不在yy中,所以我们可以接受x
  • x 等于y,我们拒绝x
  • x 大于y,这意味着我们需要在yy中向前移动才能确定是拒绝还是接受x

这是函数定义:

minus :: Ord a => [a] -> [a] -> [a]  
minus xx@(x:xs) yy@(y:ys) = case (compare x y) of
LT -> x : minus xs yy
EQ -> minus xs ys
GT -> minus xx ys
minus xs _ = xs

关于python - 这段 Python 代码的 Haskell 等价物,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22511822/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com