function x i xs = let l = i `mod` length xs in take l xs ++ x : drop (l + 1) xs
任何人都可以向我解释在这里做什么,它代表什么,在这里做什么,它代表什么,以及什么是l
答案 0 :(得分:2)
这定义了一个名为function
的函数(缺乏想象力)。它需要3个参数x
,i
和xs
。值得注意的是类型签名
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
这种方式通常可以更自然地阅读。