2013-12-11 54 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