Haskell - 代码解释

时间:2013-12-11 17:48:45

标签: haskell

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

任何人都可以向我解释在这里做什么,它代表什么,在这里做什么,它代表什么,以及什么是l

2 个答案:

答案 0 :(得分:2)

这定义了一个名为function的函数(缺乏想象力)。它需要3个参数xixs。值得注意的是类型签名

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

该函数的主体位于=的右侧。让我们重新认识一下

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

所以l i的修改长度为xs,我们从l获取xs个元素并将其附加到x : drop (l+1) xs 。这会从l + 1中删除xs个元素并将x放在前面。

现在不是告诉你它的用途,而是一些示例输入及其结果

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

由于这看起来像家庭作业,我会让你弄清楚这种模式。

这是非常基本的Haskell,如果这是一个课程,我强烈建议您阅读Learn You A Haskell,这对于学习基础知识非常有用。

答案 1 :(得分: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

这种方式通常可以更自然地阅读。