【问题标题】:How would I write a Scheme procedure that takes a list and returns the list created by switching successive elements in the list?我将如何编写一个 Scheme 过程,它接受一个列表并返回通过切换列表中的连续元素创建的列表?
【发布时间】:2021-11-12 14:23:09
【问题描述】:

我在编写一个接收列表并返回通过切换列表中的连续元素创建的列表的 Scheme 过程时遇到问题。

例如,如果我打电话给:(newlist ‘((a b) (c d) e f g)),我会得到:‘( (b a) (d c) f e g)

到目前为止,我已经尝试了以下方法,但在尝试编译时出现错误:

(define (newlist givenList)
  (cond ; Condition statement
    ((null? givenList)
        '())
        ((null? (cdr givenList))
            (list (car givenList)))
        (list (cadr givenList) (car givenList)))
    (newlist (cddr givenList)))

cddr:违反合同 预期:(cons/c any/c pair?) 给定:(g)

这种语言与我以前使用过的语言非常不同,所以我承认有点难过。

【问题讨论】:

    标签: scheme lisp racket


    【解决方案1】:

    你的括号是错误的。这是你写的:

    (define (newlist givenList)
      (cond ; Condition statement
          ( (null? givenList)
              '()
              )
          ( (null? (cdr givenList))
              (list (car givenList))
              )
          ( list                        ; NB
              (cadr givenList)
              (car givenList)
              ) )
      (newlist                          ; NB
         (cddr givenList)))
    

    根据错误信息判断,您使用的是 Racket。单击其编辑器中的左括号将突出显示表达式到其结束括号。按“Alt-右箭头”将使您的光标点跳到右括号,然后按“Alt-左箭头”,回到开头的那个。这样您就可以看到是什么,并重新格式化并添加空格以使代码更清晰。

    特别是,您的cond 的第三个子句以list 开头。它被测试为假或真,因为它不是#f,所以它被认为是真的。所以下面的两个表达式将被计算,而第一个的值将被忽略。

    然后,正如我们现在所见,整个 cond 表达式的值被忽略,而另一种形式 (newlist ...) 被无条件地求值。

    【讨论】:

    • 当您更正括号时,请使用更新的代码发布一个新问题。那么你的程序的逻辑就可以解决了。
    • "根据报错信息判断,你使用的是Racket。" -- OP也使用了Racketismnull来表示another recent question中的空列表;我在这些问题中添加了racket 标签。
    • @adabsurdum 你忘了这个。 :)(我很快就会做)---在一个无关的笔记上,你有没有注意到 tfb 已经离开了,所以......真是太糟糕了。
    • Hrmm.... 我不知道我是如何错过将标签添加到这个问题的;)在不相关的注释上,我确实注意到 tfb 离开了。那太糟糕了;他们发布了很多很棒的答案。最近我偶尔会在#commonlisp irc 频道上看到 tfb。 IAC,常见的 lisp 和 scheme 标签最近似乎不太活跃,所以它们可能不会丢失太多;)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-02-03
    • 1970-01-01
    • 2012-08-30
    • 2022-11-19
    • 2021-11-21
    • 2010-10-20
    • 2016-06-21
    相关资源
    最近更新 更多