是否可以为列表理解中的每个项目返回2个(或更多)项目?
我想要的(例子):
[f(x), g(x) for x in range(n)]
Run Code Online (Sandbox Code Playgroud)
应该回来 [f(0), g(0), f(1), g(1), ..., f(n-1), g(n-1)]
所以,要替换这段代码:
result = list()
for x in range(n):
result.add(f(x))
result.add(g(x))
Run Code Online (Sandbox Code Playgroud) 我正在尝试为模板haskell中的函数创建类型签名.有这么简单的方法吗?
在此期间我已经做了一些解决方法,但它应该更容易,对吧?
-- TH.hs
module Lib.TH (mkFunction) where
import Language.Haskell.TH
mkFunction n = do
let name = mkName n
[d|
$( ... ) :: Integer -> Integer
$(varP name) = \x -> x + 2|]
-- Other.hs
import TH
mkFunction "test"
Run Code Online (Sandbox Code Playgroud)
我应该在$( ... )
上面写什么?我试过的一切都会产生
Invalid type signature: ... :: Integer -> Integer
Should be of form <variable> :: <type>
Run Code Online (Sandbox Code Playgroud) 我刚刚开始进入类中的函数式编程世界.作为赋值的一部分,我们必须编写一个函数来确定列表是否是单例(如果列表中只有一个元素)
我写了这个函数,它工作得很好:
singleton x = x /= [] && x == take 1 (x)
Run Code Online (Sandbox Code Playgroud)
如果我调用singleton [1],它会按预期返回true.如果我调用singleton []或singleton [1,2,3],它会按预期返回false.
但是,我的教授希望我们正确地记录代码(我不完全确定这是什么,但它告诉haskell期望从函数输入和输出的内容):
singleton :: [a] -> Bool
Run Code Online (Sandbox Code Playgroud)
据我所知,这应该有效,但是一旦我有了这个,编译器会说"使用'/ ='时没有(Eq a)的实例"
任何人都可以指出我正确的方向来获得编译的代码(我真的不知道它叫什么)函数声明的位?
谢谢!