返回所有其他元素的列表的计划程序(A scheme procedure that returns a

2019-07-03 17:51发布

我有一点的,实施这个方案的计划麻烦,但我觉得我的存在方式90%。 不幸的是,我需要一点含糊它,因为这是一个家庭作业。 我想(ABCD)返回(BD)。 但我得到的是说,作为参数传递给安全车传递的对象(),一个错误,是不是一对| “这是我的代码:

(DEFINE (other_el lis)
  (COND
   (( NULL? lis ) '())
   ((LIST? lis)
    (append (CADR lis) (other_el (CDR lis))))
   (ELSE (show " USAGE: (other_el [LIST])"))))

Answer 1:

有许多与此代码之前我演示了正确的代码,应该提到的小问题。

  1. 不要利用程序的名字,如CDR和方案定义。
  2. 不要手动显示错误消息。 使用异常。
  3. 你应该总是缩进代码。 (编辑:它看起来像有人已经编辑了问题的代码,包括缩进)

总之,这里是您正在寻找的功能:

(define (evens lst)
  (if (or (null? lst)             ; if the list is empty 
          (null? (cdr lst)))      ; or the list has a single element
      '()                         ; then return the empty list
      (cons (cadr lst)            ; otherwise `cons` the second element
            (evens (cddr lst))))) ; and recursively advance two elements

我在DrRacket 5.3测试功能,并按照指定的(埃文斯 '(ABCD))返回'(BD)。 如果您有任何问题,让我知道。 祝你的功课!



Answer 2:

这个比你问前面的问题要简单得多。 记住,你不必计算每一步的长度(这可能是非常低效的),或使用追加操作来解决它(使用cons代替); 这里的答案的结构,因为它看起来像功课I'l让你填写的空白:

(define (every-other lst)
  (if (or <???>                    ; if the list is empty 
          <???>)                   ; or the list has a single element
      <???>                        ; then return the empty list
      (cons <???>                  ; otherwise `cons` the second element
            (every-other <???>)))) ; and recursively advance two elements

如果你需要做一些错误首先检查,使用其他功能,并呼吁你一定的论据是正确后,上面的程序:

(define (other_el lst)
  (if (list? lst)
      (every-other lst)
      (error "USAGE: (other_el [LIST])")))

使用这样的:

(other_el '(A B C D E G))
=> '(B D G)


文章来源: A scheme procedure that returns a list of every other element
标签: scheme