我正在尝试编写一个R7RS库,它将以破坏性的方式逆转列表,
我目前已经写了这段代码;
#lang r7rs
(define-library (in-place-reverse!)
(export reverse!)
(import (scheme base))
(ignore the code below)
; (define (reverse! list)
; (if (null? list)
; '()
; (append (reverse (cdr list))
; (list (car list)))))))
(begin
(define (reverse! lst)
(define (reverse-hulp! prev cur)
(cond
((null? cur) prev)
((next) cdr cur)
((set-cdr! cur prev))
(else
(reverse-hulp! cur next))))))
(reverse! '() lst))我唯一担心的是我收到的错误。
define-library: expected one of these identifiers: `import', `export', `begin', `cond-expand', or `include'
parsing context:
while parsing library clause in: reverse!我的代码是否按照我的要求工作?任何一种建议都是值得感激的!
试图实现反向过程,就像在R5RS中那样,这次我使用的是破坏性操作符。
发布于 2022-12-04 19:37:02
您的错误消息与代码不匹配。当我运行您的示例时,会得到以下错误:
define-library: expected one of these identifiers: `import', `export', `begin', `cond-expand', or `include'
parsing context:
while parsing library clause in: ignore如果我注释掉ignore表单,我会得到您的错误,并突出显示表达式(reverse! '() lst)。
问题是表达式在begin之外。另外,其意图可能是在reverse!中启动该过程。
#lang r7rs
(define-library (in-place-reverse!)
(export reverse!)
(import (scheme base))
(begin
(define (reverse! lst)
(define (reverse-hulp! prev cur)
(cond
((null? cur) prev)
((next) cdr cur)
((set-cdr! cur prev))
(else
(reverse-hulp! cur next))))
(reverse! '() lst))))然后,您需要弄清楚如何处理next。
https://stackoverflow.com/questions/74679810
复制相似问题