lluvia900125 2023-05-19 22:27 采纳率: 45%
浏览 25
已结题

scheme: Error: argument 1 of map has wrong type (NoneType)

我在上CS61A的课,学习scheme, 我跟着视频敲的代码,完全一样(视频里有代码,视频链接https://www.youtube.com/watch?v=0GcZKmdzPWU&list=PL6BsET-8jgYXHupEH2vUfhlvwbJddZdJM&index=5%EF%BC%89%E4%BD%86%E6%98%AF%E6%88%91%E5%9C%A8terminal 运行时总是报错,该怎么改呢

(define (evenSub s)
  (if (null? s) nil
    (append (evenSub (cdr s))
      (map (lambda (t) (cons (car s) t))
        (if (even? (car s))
          (evenSub (cdr s))
          (oddSub (cdr s))
          )
        )
      (if (even? (car s)) (list (list (car s))) nil))))

(define (oddSub s)
  (if (null? s) nil
    (append (oddSub (cdr s))
      (map (lambda (t) (cons (car s) t))
        (if (odd? (car s))
          (evenSub (cdr s))
          (oddSub (cdr s))))
      (if (odd? (car s)) (list(list((car s))) nil)))))

报错信息:

XL@mbp lab11 % python3 scheme -i evensub.scm
Welcome to the CS 61A Scheme Interpreter (version 1.2.5)

scm> (evenSub '(3 4))
Traceback (most recent call last):
  0 (append (evensub (cdr s)) (map (lambda (t) (cons (car s) t)) (if (even? (car s)) (evensub (cdr s)) (oddsub (cdr s)))) (if (even? (car s)) (list (list (car s))) ()))
  1 (map (lambda (t) (cons (car s) t)) (if (even? (car s)) (evensub (cdr s)) (oddsub (cdr s))))
Error: argument 1 of map has wrong type (NoneType)
scm> 
  • 写回答

2条回答 默认 最新

  • m0_65077616 2023-05-20 17:59
    关注

    在你提供的代码中,有一个语法错误和一个逻辑错误。

    语法错误:
    (if (odd? (car s)) (list(list((car s))) nil))))) 这一行,多了一个多余的括号。应该修改为 (if (odd? (car s)) (list (list (car s))) nil)))

    逻辑错误:
    (if (odd? (car s)) (list (list (car s))) nil))) 这一行,多了一个额外的括号,导致列表的嵌套错误。应该修改为 (if (odd? (car s)) (list (list (car s))) nil))

    以下是修改后的代码:

    (define (evenSub s)
      (if (null? s) '()
          (append (evenSub (cdr s))
                  (map (lambda (t) (cons (car s) t))
                       (if (even? (car s))
                           (evenSub (cdr s))
                           (oddSub (cdr s))))
                  (if (even? (car s)) (list (list (car s))) '()))))
    
    (define (oddSub s)
      (if (null? s) '()
          (append (oddSub (cdr s))
                  (map (lambda (t) (cons (car s) t))
                       (if (odd? (car s))
                           (evenSub (cdr s))
                           (oddSub (cdr s))))
                  (if (odd? (car s)) (list (list (car s))) '()))))
    

    请注意,这里只纠正了语法错误和逻辑错误,但无法确定整个程序的正确性和预期功能是否符合你的需求。

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(1条)

报告相同问题?

问题事件

  • 系统已结题 5月30日
  • 已采纳回答 5月22日
  • 创建了问题 5月19日