如果Haskell中的列表为空,则提供默认值列表?

时间:2015-04-26 01:24:50

标签: haskell

我解析命令行参数以确定我希望程序返回哪个值

但如果我没有提供任何值,我想在列表中添加一堆默认值。

有点像Python xs = parsed_list or [1,2,3]

2 个答案:

答案 0 :(得分:2)

使用警卫:

xs | null parsed_list = [1,2,3]
   | otherwise        = parser_list

使用if :(如@Mephy建议的那样)

xs = if null parsed_list then [1,2,3] else parsed_list

使用模式匹配:(参见@ jtobin的回答)

使用foldr(不推荐):

xs = foldr (\_ _ -> parsed_list) [1,2,3] parsed_list

使用自定义运算符:

ifEmpty :: [a] -> [a] -> [a]
ifEmpty [] def = def
ifEmpty ys _   = ys

xs = parsed_list `ifEmpty` [1,2,3]

答案 1 :(得分:1)

只需检查并查看解析后的参数列表是否为空,如果是,则提供默认值。例如:

import System.Environment

defaults = undefined

foo = do
  args <- getArgs
  return $ case args of
    [] -> defaults
    xs -> xs