【问题标题】:Mergesort in Racket in R5RSR5RS 中 Racket 中的 Mergesort
【发布时间】:2020-09-10 18:18:01
【问题描述】:

我正在尝试在 Racket(在 R5RS 中)中编写合并排序。

我不确定我是怎么得到这么多语法错误的。


所以,我从那些评论说我实际上是在用 R 而不是 R5RS 编写的人的帮助中了解到。我是学习这两种语言的新手,所以我将不胜感激有关如何在 R5RS 中编写合并排序方法的任何帮助。我删除了大部分语法错误的原因,例如

非法使用'['

然后它什么也没做。


这是我修复程序之前的代码

(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))))

编辑:感谢您帮助理解我在这里犯下的错误。我已经更好地格式化了代码,所以它是缩进的。

【问题讨论】:

  • 要么使用#lang racket,要么重写所有代码以符合R5RS,删除特定于Racket的语法。
  • 看在上帝的份上,请缩进你的代码,无法阅读或理解!

标签: algorithm syntax-error racket mergesort r5rs


【解决方案1】:

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

您所做的有点像将 FORTRAN 77 编译器指向 Fortran 2018 程序并期望它能够应对。

(另外:缩进你的代码!)

【讨论】:

  • 我缩进了我的代码,谢谢你的提示。这真的帮助我弄清楚我做错了什么。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-04-22
  • 2011-10-27
  • 2011-07-28
  • 2017-09-24
  • 1970-01-01
  • 2016-03-18
相关资源
最近更新 更多