我是一个新的哈斯克尔,我试图创建一个函数,将采取整数列表并返回一个列表包含两个子列表,第一个子列表包含偶数和其他包含奇数。我无法使用偶数,奇数或过滤器函数。我创建了我自己的函数如下哈斯克尔创建我自己的过滤功能
myodd :: Integer -> Bool
myodd n = rem (abs(n)) 2 == 1
myeven :: Integer -> Bool
myeven n = rem (abs(n)) 2 == 0
segregate [] = ([], [])
segregate [x] = ([x], [])
segregate (x:y:xs) = (x:xp, y:yp) where (xp, yp) = segregate xs
即时通讯工具尝试使用两个第一个函数并在分离的函数上使用它时遇到问题。我在拍更多的经验,我装箱功能如下:
(define (myeven? x)
(= (modulo x 2) 0))
(define (myodd? x)
(= (modulo x 2) 1))
(define (segregate xs)
(foldr (lambda (x b)
(if (myeven? x)
(list (cons x (first b)) (second b))
(list (first b) (cons x (second b))))) '(()()) xs))
您的球拍代码没有意义。你测试过了吗? – dfeuer
对我来说,它看起来像你的Haskell代码和你的球拍代码正在做两件完全不同的事情 - 球拍代码根据* value *是奇数还是偶数来划分输入列表,而Haskell代码根据该值的*索引*是奇数还是偶数(代码中的错误尽管)。你究竟想要实现哪两个? –
@FrankSchmitt,球拍代码实际上并没有这样做。事实上,我很确定它也会抛出一个错误。 – dfeuer