【问题标题】:Take - Haskell problems within lists拿 - 列表中的 Haskell 问题
【发布时间】:2016-03-04 20:40:39
【问题描述】:

我正在学习 Haskell。我有一个如下所示的函数:

takeN :: Integral a => a -> [a]
takeN n = take n [x | x<-[0..]]

我想要做的只是在一个无限列表中返回 n 个元素,我不知道为什么这不起作用。关于如何在不放弃我的绑定的情况下修复它的任何解释(?)

【问题讨论】:

  • 您遇到什么错误?它对我有用。
  • Notice takeN n = [0 .. n - 1] 也有效并且具有相同的含义 - [0..] 可能是无限的这一事实无关紧要。
  • @jamshidh 你是否包含了类型签名?
  • @PyRulez - 奇怪的是,是的......它对我有用。

标签: list haskell integral take


【解决方案1】:

这不起作用的原因是take 的类型为Int -&gt; [a] -&gt; [a]。号码必须是Int,不能是Integral

您可以通过fromIntegral 解决该问题:

takeN :: Integral a => a -> [a]
takeN n = take (fromIntegral n) [x | x<-[0..]]

【讨论】:

  • @Carsten 我不确定你的意思...上述实现适用于我的机器™。
【解决方案2】:

您可以在不创建自己的函数的情况下做到这一点: 输入>> 取 3 [1..] 输出>> [1,2,3]

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-01-02
    • 1970-01-01
    • 1970-01-01
    • 2019-06-03
    • 2013-05-02
    • 1970-01-01
    相关资源
    最近更新 更多