【发布时间】:2015-05-12 10:35:58
【问题描述】:
我正在编写一个程序,我必须在其中重用我的一位教授的代码。我的程序是用 Racket 编写的,而我想重用的代码是用 r6rs 编写的。
当我想测试我的程序时,它总是失败。
这是因为我调用了一个以列表(球拍列表)为参数的过程,但该过程位于 R6RS 文件中。在 R6RS 文件中有 (assert (list? argument)) ,这是 always false...
这里是一个简单的例子: 球拍代码:
#lang racket
(require "test2.ss")
(define a (list 1 2 3))
(b a)
R6RS 代码:
#!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)))
R6RS 文件中的list? 测试始终为假...即使我像上面的示例一样将新创建的列表作为参数传递。
我怎样才能像上面的例子一样做,以便list? 测试结果为真。
感谢您的帮助!
编辑:我在不可变列表上找不到结果为 true 的 r6rs 测试,但我找到了另一种解决问题的方法(通过将可变列表传递给过程)。
【问题讨论】:
-
Racket 对是不可变的,Scheme 对不是,因此存在差异。
-
确实,Scheme 中是否存在另一个测试,当在不可变列表上测试时结果为真?因为找不到..