微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

R5RS中的球拍中的Mergesort 我不确定我怎么会收到这么多语法错误

如何解决R5RS中的球拍中的Mergesort 我不确定我怎么会收到这么多语法错误

我正在尝试在Racket(在R5RS中)中编写mergesort。

我不确定我怎么会收到这么多语法错误


因此,我从那些评论家的帮助中了解到,我实际上是在用R而不是R5RS编写。我是学习这两种语言的新手,所以对于在R5RS中编写mergesort方法的任何帮助,我将不胜感激。我消除了大多数语法错误原因,例如

非法使用'['

但是它什么也没做。


这是我在修复程序之前所拥有的代码

(define (merge as bs)
        (match* (as bs)
        [((list) bs) bs]
        [(as (list)) as]
        [((list a as ...) (list b bs ...))
(if (< a b)
        (cons a (merge as (cons b bs)))
        (cons b (merge (cons a as) bs)))]))
(define (mergesort vs)
        (match vs
        [(list) vs]
        [(list a) vs]
[_ (define-values (lvs rvs)
        (split-at vs (quotient (length vs) 2)))
        (merge (mergesort lvs) (mergesort rvs))]))

这是我修复它后仍然无法正常工作

(define (merge as bs)
        (match* (as bs)
        ((list) bs) bs
        (as (list)) as
        ((list a as ...) (list b bs ...))
(if (< a b)
        (cons a (merge as (cons b bs)))
        (cons b (merge (cons a as) bs)))))

(define (mergesort vs)
        (match vs
        (list) vs
        (list a) vs
(define-values (lvs rvs)
        (split-at vs (quotient (length vs) 2)))
        (merge (mergesort lvs) (mergesort rvs))))

编辑:感谢您对我在这里犯的错误的理解所提供的帮助。我已经对代码进行了更好的格式化,以使其缩进。

解决方法

如果您使用的是Racket的R5RS语言,则需要编写使用该语言的程序:使用其他某种语言编写的程序将无效。在这种情况下,match至少不是R5RS,我强烈怀疑split-atdefine-values都不是。

您正在执行的操作有点像将FORTRAN 77编译器指向Fortran 2018程序并期望它可以应对。

(也:缩进您的代码!)

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。