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程序并期望它可以应对。

(也:缩进您的代码!)