无敌暴龙战士 2023-04-11 08:47 采纳率: 100%
浏览 14
已结题

SICP Exercise 2.20,语言是MIT Scheme

这是原问题:

img

img

img

就是找出一个列表中所有奇偶性跟指定正整数一样的数字,并且输出一个新列表。
这是我的答案:

#lang sicp
(define (par? x)
  (remainder x 2))

(define (same_parity x . y)
  (let ((par (remainder x 2)))
    (if (null? (car y))
        nil
        (if (= (par? (car y)) par)
            (cons (list (car y)) (same_parity x . (cdr y)))
            (same_parity x . (cdr y))))))

(define test_lst (list 1 2 3 4 5 6 7 8))

测试时的代码:

(same_parity 3 test_lst)

报错信息:

remainder: contract violation
  expected: integer?
  given: (1 2 3 4 5 6 7 8)

我问过chatgpt了它没找出问题,我的(car y)没有成功提取出第一个列表元素,而是直接把整个列表输入到remainder函数里去了,为什么啊!?

  • 写回答

2条回答 默认 最新

  • 阿里嘎多学长 2023-04-11 09:28
    关注

    以下内容部分参考ChatGPT模型:


    你的代码已经很接近正确答案了,只需要稍作修改即可。你需要定义一个函数,输入为一个列表和一个正整数,输出为一个新列表,其中包含所有奇偶性与指定正整数相同的数字。你可以使用filter函数和lambda表达式来实现这个函数。以下是一个示例代码:

    (define (same-parity lst n)
      (define (par? x)
        (remainder x 2))
      (filter (lambda (x) (= (par? x) (par? n))) lst))
    

    例如,对于列表 '(1 2 3 4 5 6 7) 和正整数 3,调用 (same-parity '(1 2 3 4 5 6 7) 3) 将返回一个新列表 (1 3 5 7),其中包含所有奇偶性与3相同的数字。


    如果我的建议对您有帮助、请点击采纳、祝您生活愉快

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

报告相同问题?

问题事件

  • 系统已结题 4月19日
  • 已采纳回答 4月11日
  • 创建了问题 4月11日

悬赏问题

  • ¥15 UE5 如何可以不渲染HDRIBackdrop背景
  • ¥70 2048小游戏毕设项目
  • ¥20 mysql架构,按照姓名分表
  • ¥15 MATLAB实现区间[a,b]上的Gauss-Legendre积分
  • ¥15 Macbookpro 连接热点正常上网,连接不了Wi-Fi。
  • ¥15 delphi webbrowser组件网页下拉菜单自动选择问题
  • ¥15 linux驱动,linux应用,多线程
  • ¥20 我要一个分身加定位两个功能的安卓app
  • ¥15 基于FOC驱动器,如何实现卡丁车下坡无阻力的遛坡的效果
  • ¥15 IAR程序莫名变量多重定义