2013-12-11 37 views
-2
function x i xs = let l = i `mod` length xs in take l xs ++ x : drop (l + 1) xs 

誰能向我解釋什麼讓在這裏做的,它代表什麼,什麼在這裏做的,它代表什麼,什麼爲l哈斯克爾 - 代碼解釋

回答

2

定義一個函數(缺乏想像力)稱爲function。它需要3個參數,x,ixs。值得注意的類型簽名

function :: Int -> a -> [a] -> [a] 

的函數體是對=的權利。讓我們再次縮進它的清晰度

let l = i `mod` length xs 
in take l xs ++ x : drop (l + 1) xs 

所以lixs長度改裝,並且我們從xsl元素和追加,爲x : drop (l+1) xs。這將從xs下降l + 1元素,並將x放在前面。

現在,而不是告訴你什麼是對,這裏有一些樣品的輸入,其結果

function 2 2 [1, 2, 3] 
> [1, 2, 2] 
function 0 (-1) [3, 3, 3] 
> [-1, 3, 3] 

因爲這看起來像功課,我會讓你找出模式。

這是非常基本的Haskell,如果這是一個班級,我強烈建議您閱讀Learn You A Haskell,這對學習基礎很有用。

+0

ty,告訴我這部分代碼的功能是什麼:x:drop(l + 1)xs – user3088738

+0

@ user3088738他是答案的一部分,它說:「這會使x + 1'elemtns從xs中丟失並放入'x'在前面,這就是它的作用:) – jozefg

+0

和你知道這裏: insert2D :: a - > Int - > Int - > [[a]] - > [[a]]/n insertD xij xss = function r'j xss where/n r = xss !! (j'mod' length xss)/ n r'= function x i r/n xss是什麼! 我寫了/ n爲新行 – user3088738

0

可以或許讀更好的時候,呈現一些空白的代碼添加:

function x i xs = let l = i `mod` length xs 
        in take l xs ++ x : drop (l + 1) xs 

let綁定變量l表達式i `mod` length xs。整個表達式的值就是

take l xs ++ x : drop (l + 1) xs 

這裏地方使用值l上面給出。在Haskell中有另一種表達方式:

function x i xs = take l xs ++ x : drop (l + 1) xs 
    where l = i `mod` length xs 

這種方式通常可以更自然地閱讀。

+0

ty,告訴我這段代碼做什麼: x:drop(l + 1)xs – user3088738