我在Haskell中编写了一些简单的模块,然后import在其他文件中编写了它.然后我试图使用我的模块中的数据构造函数 - 有一个错误Not in scope: data constructor: <value>.我该如何解决?
注意:当我在导入后在解释器中使用它时 - 一切都没有错误.
我的模块Test.hs:
module Test (test_f) where
data Test_Data = T|U|F deriving (Show, Eq)
test_f x
| x == T = T
| otherwise = F
Run Code Online (Sandbox Code Playgroud)
我的档案file.hs:
import Test
some_func = test_f
Run Code Online (Sandbox Code Playgroud)
如果我在翻译中写作没有错误:
> :l Test
> test_f T
T
Run Code Online (Sandbox Code Playgroud)
在解释器中我正在尝试执行some_func T,但是有一个错误.如何Test_Data在我的文件中使用类来描述注释?
我怎么能zip两个像
["Line1","Line2","Line3"]
["Line4","Line5"]
Run Code Online (Sandbox Code Playgroud)
不丢弃第一个列表中的休息元素?
如果可以的话,我想用空列表压缩额外的元素.
如何使用Data.Array?生成随机数组?
我有功能,给我一个随机数:
randomNumber :: (Random r) => r -> r -> IO r
randomNumber a b = getStdRandom (randomR (a,b))
Run Code Online (Sandbox Code Playgroud)
然后我试图使用函数Data.Array来生成列表
assocs $ array (1,100) [(i,i) | i <- (randomNumber 1 10)]
Run Code Online (Sandbox Code Playgroud)
我知道,那种类型randomNumber是IO,有什么方法可以转换IO Int -> Int吗?或者我需要使用其他方法来获取随机列表?我应该bind在do块中使用operator来执行这些功能吗?
有没有办法找出列表的本地最大值使用foldr或者foldl可能我必须使用unfoldr因为列表的第一个和最后一个元素不是本地最大值?
我理解如何使用带有警卫的递归来找到它,例如
localMax :: [Int] -> [Int]
localMax [] = []
localMax (x:[]) = []
localMax (x:y:[]) = []
localMax (x:y:z:zs)
| y > z && y > x = y:localMax (y:z:zs)
| otherwise = localMax (y:z:zs)
Run Code Online (Sandbox Code Playgroud) 我有一个按字符串长度排序的Enumerable字符串序列(所有字符串都是大写的).如何按字母顺序排序此序列,然后删除具有相同长度的所有字符串,除了LINQ中每个长度组中的一个?
例如:
ORIEW DRERE EWKD OPPA LTS ERS YT GL HF
应该是
DRERE EWKD ERS GL