【问题标题】:Chicken Scheme: make-table unbound variable鸡计划:生成表未绑定变量
【发布时间】:2018-11-19 09:17:17
【问题描述】:

我正在尝试声明一个哈希表。基于this SRFI 我相信(define x (make-table)) 的形式应该会导致正确的行为;但是,我收到以下错误。

CHICKEN
(c) 2008-2017, The CHICKEN Team
(c) 2000-2007, Felix L. Winkelmann
Version 4.12.0 (rev 6ea24b6)
linux-unix-gnu-x86-64 [ 64bit manyargs dload ptables ]
compiled 2017-02-19 on yves.more-magic.net (Linux)

#;1> (make-table)

Error: unbound variable: make-table

        Call history:

        eval.scm:211: ##sys#get   
        eval.scm:218: values      
        eval.scm:255: ##sys#alias-global-hook     
        modules.scm:769: ##sys#qualified-symbol?          
        modules.scm:777: ##sys#active-eval-environment    
        modules.scm:777: g2354    
        modules.scm:784: mrename          
        modules.scm:762: ##sys#current-module     
        eval.scm:259: ##sys#symbol-has-toplevel-binding?     
        eval.scm:265: ##sys#symbol-has-toplevel-binding?     
        library.scm:1668: after   
        eval.scm:857: g1785       
        <eval>    (make-table)
        library.scm:4051: ##sys#get-call-chain    
        library.scm:3834: ##sys#make-vector       
        library.scm:1371: ##sys#allocate-vector         <--

此外,我在其他功能上也遇到了类似的错误。会不会是我错误地安装了解释器?

【问题讨论】:

    标签: chicken-scheme


    【解决方案1】:

    鸡肉不附带 SRFI 90,据我所知,到目前为止,也没有人为它制作鸡蛋。不过,较早且更常用的哈希表库 SRFI-69 是 part of core。默认情况下它也不可用,您需要像这样使用它:

    (use srfi-69)
    

    在 CHICKEN 5(我强烈建议您安装它,因为它有很多改进并且是当前支持的主要版本)中,SRFI-69 不再是核心的一部分,但可以通过chicken-install 安装as an egg。在那里,use 不再存在。相反,在安装了 egg 之后,你可以像这样导入它:

    (import srfi-69)
    

    顺便说一句,SRFI 是“实施请求”,并不是每个 Scheme 系统都会实施每一个 SRFI。有时是因为人们反对 SRFI(有些是有争议的),有时是因为没有人解决它,有时是因为 SRFI 无法实现/对于特定的 Scheme 确实有意义(例如,C FFI 在运行的 Scheme 中没有意义在 JVM 上)。

    您必须检查您的 Scheme 的功能,看看是否包含您要使用的 SRFI。请注意,对于 CHICKEN,许多 SRFI 是通过鸡蛋在核心之外实现的。 CHICKEN 核心仅包含少数 SRFI,例如 0、1、2、4、6、8、9、11、13、14、15、16、17、23、30、39、55、69。在 CHICKEN 5 中, SRFI 1、13、14 和 69 已从内核中取出,因为它们可以很容易地在外部实现。查看list of eggs 了解更多 SRFI 实现。

    编辑:我忘了,有一个wiki page 力求详尽地列出所有支持的 SRFI。它还没有为 CHICKEN 5 更新,但列表最终应该是相同的,因为越来越多的鸡蛋从 CHICKEN 4 移植到 5 (甚至变得更长,因为 CHICKEN 5 看到了很多新的发展)。

    【讨论】:

    • 感谢您的回复。我得到了第 5 版设置。我在使用chicken-install 安装 srfi-69(或任何其他鸡蛋)时遇到问题我收到错误Error: extension or version not found: "srfi-69"。这是没有正确的鸡蛋存储库的问题吗?我尝试过使用 sudo 和详细标志,但输出是相同的。
    • 你能粘贴chicken-install -verbose srfi-69的完整输出吗?
    • 绝对srfi-69 not cached Error: extension or version not found: "srfi-69"
    • 您安装 CHICKEN 时的 PREFIX 错误(或者您尚未安装 CHICKEN?)。请尝试chicken-install -u,看看会不会出错。
    • 很高兴听到您至少找到了原因。当然,您可以将$PREFIX 设置为任何您想要的(可以是/opt/chicken~/chicken,无论您喜欢哪个)。但是,当您第一次调用make 时,它会写入一个包含这些路径设置的chicken-config.h(如果您没有提供,则使用默认的PREFIX)。如果稍后您再次使用不同的PREFIX 调用make,它将不会重新生成chicken-config.h,从而导致安装 CHICKEN 的位置与查找数据和配置文件的位置不匹配;如果您设置了PREFIX,则在每个make 调用中使用相同的名称。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多