问题描述
我正在尝试在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-at
和define-values
都不是。
您正在执行的操作有点像将FORTRAN 77编译器指向Fortran 2018程序并期望它可以应对。
(也:缩进您的代码!)