R5RS 中 Racket 中的合并排序
Mergesort in Racket in R5RS
我正在尝试在 Racket 中(在 R5RS 中)编写合并排序。
我不知道我怎么会遇到这么多语法错误。
所以,我从那些评论我实际上是用 R 而不是 R5RS 编写的人的帮助中了解到。我是学习这两种语言的新手,所以对于如何在 R5RS 中编写合并排序方法的任何帮助,我将不胜感激。我删除了大部分语法错误的原因,例如
Illegal use of '['
但后来什么也没做。
这是我修复程序之前的代码
(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 程序并期望它能够处理。
(还有:缩进你的代码!)
我正在尝试在 Racket 中(在 R5RS 中)编写合并排序。
我不知道我怎么会遇到这么多语法错误。
所以,我从那些评论我实际上是用 R 而不是 R5RS 编写的人的帮助中了解到。我是学习这两种语言的新手,所以对于如何在 R5RS 中编写合并排序方法的任何帮助,我将不胜感激。我删除了大部分语法错误的原因,例如
Illegal use of '['
但后来什么也没做。
这是我修复程序之前的代码
(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 程序并期望它能够处理。
(还有:缩进你的代码!)