我是一個新的哈斯克爾,我試圖創建一個函數,將採取整數列表並返回一個列表包含兩個子列表,第一個子列表包含偶數和其他包含奇數。我無法使用偶數,奇數或過濾器函數。我創建了我自己的函數如下哈斯克爾創建我自己的過濾功能
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