1

请原谅这个问题的简单性,但我没有找到解决我问题的另一个问题。我已经安装了 haskell 和 leksah,然后执行“cabal install nat”来安装自然数库。该库看起来像是安装在“/Users/jstanford/Library/Haskell/ghc-7.0.4/lib/nat-0.2/lib”中

我在 leksah 中创建了一个工作区和一个包,并更新了我的首选项以查看:

/Library/Frameworks/GHC.framework /Users/jstanford/Library/Haskell /Users/jstanford/.leksah-0.10/packageSources

用于包源并保留默认 ~/.leksah-0.10/packageSources 用于解包 cabal 包。

我从“Pearls of Functional Algorithm Design”中获取了第一段代码,所以我的代码如下所示:

-----------------------------------------------------------------------------
--
-- Module      :  Main
-- Copyright   :
-- License     :  AllRightsReserved
--
-- Maintainer  :
-- Stability   :
-- Portability :
--
-- |
--
-----------------------------------------------------------------------------

module Main (
    main
) where

import Data.List ((\\))
import GHC.Arr (accumArray, elems, Array(..))



minfree :: [Nat] -> Nat
minfree xs = head([0 ..])\\ xs

search :: Array Int Bool -> Int
search = length takeWhile id . elems

checklist :: [Int] -> Array Int Bool
checklist xs = accumArray(V) False (0,n)
               (zip (filter (<= n) xs) (repeat True))
               where n = length xs

main = (

    minfree[0, 2, 5]
    )

Leksah 能够找到 \ 和 Array 的导入,但找不到 Nat。关于如何找到导入的任何指示?编译器还抱怨 accumArray(V)。我怀疑 V 不应该是大写字母 V,而是一些看起来像 V 的符号。对此的指导也将非常感激!

4

1 回答 1

3

Nat类型在 中定义Data.Number.Nat,因此您应该在文件顶部导入它:

import Data.Number.Nat

至于(V),它可能意味着(||)。“V”很可能是∨,逻辑析取的符号:通常称为布尔值运算符。像这样的运算符替换在排版 Haskell 代码中很常见,但在您习惯看到它们之前可能会非常混乱。

此外,您不应从GHC.Arr;导入数组函数。那是一个内部 GHC 模块;Data.Array我建议改为导入。

于 2012-02-09T02:47:19.937 回答