小编Has*_*ush的帖子

Python(列表理解):为每个项目返回两个(或更多)项目

是否可以为列表理解中的每个项目返回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)

python list-comprehension

80
推荐指数
4
解决办法
2万
查看次数

模板haskell中的拼接类型签名

我正在尝试为模板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)

haskell template-haskell

8
推荐指数
1
解决办法
479
查看次数

Haskell"使用`/ ='产生的(Eq a)没有实例

我刚刚开始进入类中的函数式编程世界.作为赋值的一部分,我们必须编写一个函数来确定列表是否是单例(如果列表中只有一个元素)

我写了这个函数,它工作得很好:

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)的实例"

任何人都可以指出我正确的方向来获得编译的代码(我真的不知道它叫什么)函数声明的位?

谢谢!

haskell

1
推荐指数
1
解决办法
880
查看次数