要回答爲什麼你的代碼不能正常工作,請記住,有沒有在列表內涵可變的變量。該表顯示得到的是如何生成的列表作爲x
前進通過值val
,val+1
,...
x k j x == val? x == val+1? element
--------------------------------------------------------- -------
val val*fac fac*k = val*val*fac True False val (x)
val+1 val*fac fac*k = val*val*fac False True val*fac (k)
val+2 val*fac fac*k = " False False val*val*fac (j)
val+3 val*fac fac*k = " False False val*val*fac (j)
...
所以你可以看到,k
和j
不會改變,因爲它們在常量來定義val
和fac
。
這是一個建議你的列表Haskell的方式。首先構建這個序列:
[ 1, fac, fac*fac, fac*fac*fac, ...]
然後將map (val*)
應用到它。
要生成的權力序列中,有幾個辦法:
1)這是(*fac)
功能迭代的列表。也就是說,定義:
f x = fac*x
然後權力清單:
[ 1, f 1, f (f 1), f (f (f 1)), ... ]
,這意味着你可以使用iterate
功能從前奏。 2)請注意,冪序列的尾部是該序列的map (*fac)
。因此,可以編寫:
powers x = 1 : map (*x) (powers x)
這是基本相同的:(1),但有時更容易發現的序列,且其尾之間的關係。
這幫助。我忘了「^」運算符。這就是我所需要的,謝謝。 – cHam