当前位置: 首页 > news >正文

scheme 用变动数据模拟

练习3.13 考虑下面的make-cycle过程,并画出盒子指针图形。

点击查看代码
(define (make-cycle x)(set-cdr! (last-pair x) x)x)
这是一个循环结构,会使得指针无限循环

QQ_1769685038897

练习3.14
下面的过程相当有用,但也有些费解:

点击查看代码
(define (mystery x)(define (loop x y)(if (null? x)y(let ((temp (cdr x)))(set-cdr! x y)(loop temp x))))(loop x '()))
这是个倒叙的结构。

QQ_1769685046937

练习3.16 ben决定写一个过程,用来统计任何一个表结构中序对的数量

点击查看代码
(define (count-pairs x)(if (not (pair? x))0(+ (count-pairs (car x))(count-pairs (cdr x))1)))
这个过程会出现重复计数的问题。
点击查看代码
> (define a1 (list 'a 'b 'c))
> (define a2 (list 'c (list 'a 'b)))
> (define x1 (cons 'a 'b))
> (define y1 (cons x1 x1))
> (define z1 (cons y1 y1))
> (count-pairs a1)
3
> (count-pairs a2)
4
> (count-pairs z1)
7

练习3.17 修正count-pairs过程

点击查看代码
;增加一个对比内容,剔除重复计数的部分
(define (element-of-set set x)(cond ((null? set) #f)((eq? (car set) x) #t)(else(element-of-set (cdr set) x))))
(define (adjoin-set set x)(cons x set))
(define (count-pair x)(let ((visited '()))(define (count-pair-set x)(cond ((not (pair? x)) 0)((element-of-set visited x) 0)(else(set! visited (adjoin-set visited x))(+ (count-pair-set (car x))(count-pair-set (cdr x))1))))(count-pair-set x)))

练习3.18 请写一个过程去检查一个表,确定其中是否有环(类似3.13中的无限循环结构)

点击查看代码
(define (cycle-pair? x)(let ((visited '()))(define (cycle-pair-set? x)(cond ((not (pair? x) #f))((element-of-set visited x) #t)(else(set! visited (adjoin-set visited x))(cycle-pair-set? (cdr x)))))(cycle-pair-set? x)))

练习3.19 采用一种只需要常量空间的算法解决3.18

点击查看代码
;无法使用表的遍历确认是否进入循环
;通过异步,通过cdr取x1,cddr取x2,如果进入循环则x2会追上x1
;由于x2肯定在x1前面,所以只用考虑x2是否会跳出
(define (cycle-pairs? x)(define (cycle? x1 x2)(cond ((not (pair? x2)) #f)((not (pair? (cdr x2))) #f)((eq? x1 x2) #t)(else(cycle? (cdr x1) (cddr x2)))))(if (not (pair? x)) #f(cycle? x (cdr x))))
http://www.jsqmd.com/news/318600/

相关文章:

  • Figma API 密钥获取及MCP配置
  • 构建跨端驾照学习助手的练习测试模块:Flutter × OpenHarmony 实战解析
  • 阿贝西利Abemaciclib联合内分泌方案给药说明与腹泻管理策略
  • 黄仁勋口中的“物理AI”时代已来,Kimi打响第一枪
  • 从锁相环到密钥保险箱:在ZYNQ上打造坚不可摧的物联网安全堡垒
  • 【毕业设计】基于java的中医养生系统的设计和实现(源码+文档+远程调试,全bao定制等)
  • LeetCode 387 字符串中的第一个唯一字符
  • 一段使用 LlamaIndex 框架构建本地文档检索系统的 Python 代码
  • 2026最新板材/环保板材/全屋定制板材/装修环保板材/衣柜专用板材/桦木板/FOSB板/橡胶木/多层板/颗粒板品牌推荐:领航健康家居,亦木良品实力之选
  • 洛谷 P4017 最大食物链计数
  • Nielsen 量子计算与量子信息:第一章 简介与概述 笔记整理
  • 服务器上线前必做清单:2C4G ECS 部署实战指南
  • MacOS启动盘制作(可多合一),并实现MacOS降版本
  • Java的Scanner对象
  • 拒绝采样,没看懂
  • 【大数据分析毕设选题】基于Spark的美食数据可视化系统完整源码分享 毕业设计 选题推荐 毕设选题 数据分析 机器学习 数据挖掘
  • result
  • 内存检测方法
  • ESLPOD_01 - ESLPOD_20
  • 2026最新板材/环保板材/全屋定制板材/装修环保板材/衣柜专用板材/橡胶木/多层板/颗粒板品牌推荐:领航健康家居,亦木良品实力之选
  • nginx
  • 2026年徐州GEO优化公司TOP3深度测评:从技术实力到效果落地选型
  • FreeRTOS 的任务与 Linux
  • 2026年1月衢州GEO优化公司推荐TOP4:从技术实力到行业适配的测评
  • Java毕设选题推荐:基于springboot的酒店客户入住管理系统基于 SpringBoot 的酒店客房管理系统【附源码、mysql、文档、调试+代码讲解+全bao等】
  • 2026年深圳GEO优化服务商推荐TOP5:技术底层到效果落地选型指南
  • 2026年汕头GEO优化公司推荐TOP3:从技术实力到效果落地深度评估
  • 复旦大学:六大顶尖AI模型的安全“体检报告“竟然如此惊人
  • VS Code 插件 - Chinese Converter - 介绍
  • 人大与百度联合攻克AI工具使用的细粒度监督难题