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

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日

悬赏问题

  • ¥30 计算机硬件实验报告寻代
  • ¥15 51单片机写代码,要求是图片上的要求,请大家积极参与,设计一个时钟,时间从12:00开始计时,液晶屏第一行显示time,第二行显示时间
  • ¥15 用C语言判断命题逻辑关系
  • ¥15 原子操作+O3编译,程序挂住
  • ¥15 使用STM32F103C6微控制器设计两个从0到F计数的一位数计数器(数字),同时,有一个控制按钮,可以选择哪个计数器工作:需要两个七段显示器和一个按钮。
  • ¥15 在yolo1到yolo11网络模型中,具体有哪些模型可以用作图像分类?
  • ¥15 AD9910输出波形向上偏移,波谷不为0V
  • ¥15 淘宝自动下单XPath自动点击插件无法点击特定<span>元素,如何解决?
  • ¥15 曙光1620-g30服务器安装硬盘后 看不到硬盘
  • ¥15 抖音直播广场scheme