簡體   English   中英

使用Haskell子集的冪的無限列表

[英]Infinite list of powers using subset of Haskell

我需要做一個函數“冪”,取一個數字n並將該數字的無窮列表返回給每個數字的冪,例如

powers 2 = 2,4,8,16,32......

我需要使用語言的非常具體的子集來執行此操作,其中我唯一可用的內置函數是:div,mod,偶數,奇數,頭,尾巴,非,null,長度,反向,elem,map,filter,foldr,sum ,product,take,drop,takewhile,dropWhile,zipWith和from。

該子集也沒有^運算符。

還有其他一些重要的約束條件:

  • 代碼不得超過1行,且不得超過80個字符
  • 不允許使用“幫助函數”,即我無法編寫在此定義內使用的另一個函數。

到目前為止,我的想法是:

powers = \n -> map (\x -> "some function to get n to the power of x") (from 1)

但是我不知道如何在沒有輔助函數的情況下獲取該函數。

例如,如果我要使用一個函數inflist,該函數返回一個無數個x列表,那么我可以執行以下操作。

powers = \n -> map (\x -> product(take x (inflist n))) (from 1)

但我無法執行此操作或類似的操作,因為我無法使用該功能。

抱歉,如果表示法與常規的haskell不同,則它是使用此表示法的非常嚴格的核心haskell子集。

這是一個遞歸問題。

powers n = n : map (* n) (powers n)

(是否允許使用: ?)

當見識到來時,這很有趣,也很有趣。 在列表中連續生成2個更長的重復項

[ [ 2 | y <- [1..x]] | x <- [1..]]

然后取每個列表的乘積。

map product [ [ 2 | y <- [1..x]] | x <- [1..]]

確保在調用我嘗試使用mod和多個mod函數限制列表的調用之前使用take x。

如果允許迭代。

take 24 $ iterate (2*) 2

將生成列表。

編輯4/4/2018

無限遞歸函數 ,可能就是您要填寫的函數。 有可能:

pow l = l ++ pow [(last l * 2)]

要生成列表,絕對有必要組裝一個列表,並且有必要使用列表的最后一個元素來依次計算下一個。 這也必須帶走。 同樣,下面的命令以1開頭列表。可以以任何數字開頭(例如64或63)。我嘗試將最后一個值作為參數傳遞,但是該函數不會生成列表。 可以選擇使用“:”代替“ ++”,但是它將產生列表中的每個元素。 要生成值列表而不是列表列表,請在使用“ take”進行清理之前使用“ concat $”。

take 10 $ pow [1]

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM