首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >与r6rs不兼容的球拍列表?

与r6rs不兼容的球拍列表?
EN

Stack Overflow用户
提问于 2015-03-10 20:02:06
回答 2查看 413关注 0票数 3

我正在编写一个程序,在这个程序中我必须重用我的一位教授的代码。我的程序是用Racket编写的,我想要重用的代码是用r6rs编写的。

当我想测试我的程序时,它总是失败的。这是因为我用as参数调用了一个过程-- list ( list),但是这个过程在R6RS文件中。在R6RS文件中有(assert (list? argument)),这是总是false.

这里有一个简单的例子: Racket代码:

代码语言:javascript
复制
#lang racket
(require "test2.ss")

(define a (list 1 2 3))
(b a)

R6RS代码:

代码语言:javascript
复制
#!r6rs

(library 
 (test)
 (export b)
 (import (rnrs base (6))
         (rnrs control (6))
         (rnrs lists (6))
         (rnrs io simple (6)))

 (define (b a)
   (display "a is : ") (display a) (newline)
   (display "list? : ") (display (list? a)) (newline)))

list?文件中的R6RS测试总是错误的.即使我以参数的形式传递一个新创建的列表,如上面的示例所示。

我怎样才能像上面的例子那样做,使list?测试结果为真。

谢谢你的帮忙!

编辑:我找不到在不可变列表上得到true的r6rs测试,但我找到了另一种解决问题的方法(将可变列表传递给过程)。

EN

回答 2

Stack Overflow用户

发布于 2015-03-10 20:27:06

这只是Alexis答案的一个补充(代码示例不能出现在评论中)。由于r6rs语言(如在racket中实现的)使用可变列表,而且所有的racket库都期望不可变列表,所以不能按原样重用r6rs代码。重用代码的最快方法是将其移植到#lang racket语言。

更改语言,删除导入语句,然后每次修复每个错误。

代码语言:javascript
复制
#lang racket

 (define (b a)
   (display "a is : ") (display a) (newline)
   (display "list? : ") (display (list? a)) (newline)))
票数 2
EN

Stack Overflow用户

发布于 2015-03-10 20:38:39

当你说你的代码是用球拍写的。您指的是Racket,软件,还是#!racket,它是Racket (软件)支持的多种兼容语言之一?

因为您的库是用#!r6rs编写的,所以您要么需要将它移植到#!racket模块,要么您的主程序可以用#!r6rs编写,您可以按原样使用这个库。第三种选择是使可变的列表传递给库函数,并将所有的表都转换回来,但或者禁止列表,但是我发现这个选项不太理想。

要完成完整的#!r6rs,您需要像这样安装库:

代码语言:javascript
复制
plt-r6rs --force --install ./test.sls

我假设test.sls在当前目录中。你会得到确认的。不需要重新启动DrRacket。(不需要强制,但它将覆盖早期版本。)然后,您只需将代码更改为Scheme代码:

代码语言:javascript
复制
#!r6rs
(import (rnrs)
        (test))

(define a (list 1 2 3))
(b a) ; #<void> (and prints stuff to stdout)

点击运行在DrRacket和看到魔术!

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/28973049

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档