在大學裏我的任務是:哈斯克爾 - 總理權力鍛鍊; Tibial - 無限合併
定義下列功能:
primepowers :: Integer -> [Integer]
計算的主要的前n權力的無限列表給定參數n的數字,排序爲asc。 也就是 primepowers n按升序包含
的元素{p^i | p是素數,1≤i≤n}。
在完成這個任務之後,我走到了死衚衕。我有以下四個功能:
merge :: Ord t => [t] -> [t] -> [t]
merge [] b = b
merge a [] = a
merge (a:ax) (b:bx)
| a <= b = a : merge ax (b:bx)
| otherwise = b : merge (a:ax) bx
primes :: [Integer]
primes = sieve [2..]
where sieve [] = []
sieve (p:xs) = p : sieve (filter (not . multipleOf p) xs)
where multipleOf p x = x `mod` p == 0
powers :: Integer -> Integer -> [Integer]
powers n num = map (\a -> num^a) [1..n]
primepowers :: Integer -> [Integer]
primepowers n = foldr merge [] (map (powers n) primes)
我認爲他們獨立工作,因爲我有一些樣品輸入測試。 合併合併兩個有序列表,以一個有序列表 素數的回報素數的無限名單 權力計算NUM正的權力(即NUM^1,NUM^2 ... NUM^N)
我嘗試合併一切都在primepowers中,但函數沒有被評估,沒有發生任何分別的一些無限循環。
我對素數或能力的優化不感興趣。只是我不明白爲什麼這不起作用。或者,我的方法不好,沒有功能,不是哈斯克爾?
問題陳述自相矛盾。 「前n個素數的無限權力列表」和「{p^i | p是素數,1≤i≤n}「是完全不同的。 –
你好。我糾正了它。這是一個翻譯錯誤 – niklas