Mur*_*lm. 1 haskell functional-programming let
如标题所示,我想在do块之后返回一个值。
示例:编写一个将变量插入到数组中给定位置的函数:
insertAt :: a -> Int -> [a] -> [a]
insertAt x n xs = do
let before = take n xs
let after = drop n xs
let merged = before ++ [x] ++ after
in merged
Run Code Online (Sandbox Code Playgroud)
例如:
insertAt'x'3“ Aleander” =>“ Alexander”
无论如何,当使用单个let调用时,可以使用in关键字返回一个值,但是在示例中多次调用let会得到错误:
错误:解析输入“ in”中的错误
我知道我可以在一个let用法中完成全部操作,但是我想知道如何处理多个let调用:)
谢谢您的帮助!
请不要不使用do
表达式。do
表达式是带有绑定的表达式的语法。是的,列表是的实例Monad
,但是您使用的方式不正确。
您可以let
在以下代码块中定义:
insertAt :: a -> Int -> [a] -> [a]
insertAt x n xs =
let before = take n xs
after = drop n xs
merged = before ++ [x] ++ after
in merged
Run Code Online (Sandbox Code Playgroud)
但是使用起来可能更优雅splitAt :: Int -> [a] -> ([a], [a])
,例如:
insertAt :: a -> Int -> [a] -> [a]
insertAt x n xs = let (hs,ts) = splitAt n xs in hs ++ x : ts
Run Code Online (Sandbox Code Playgroud)