`
azure_sky
  • 浏览: 12589 次
  • 性别: Icon_minigender_1
  • 来自: 上海
最近访客 更多访客>>
社区版块
存档分类
最新评论

与Scheme共舞一文中一个小小的bug :Tree Depth

阅读更多
偶然间发现与Scheme共舞中一个小小的bug,原文如下:

... ...

而下面的树也可以用列表直观表达:(A B C (D (F H) G) E)。也就是说,每个列表表示一个树或子树。列表的第一个元素是根。

在处理树状数据时,我们往往需要知道树的最大深度(最大深度也叫树的高度)。一个节点的深度等于该节点到根节点间的路径数。下图中的树最大深度为3, 路径是A->D->F->H。现在我们写一个函数来计算一棵树的深度。
。。。 。。。

原文所附的算法如下(Scheme):
ruby 代码
 
  1. (define (tree-depth tree)    
  2.   (cond    
  3.     ((list? tree) (+ 1 (apply max (map tree-depth tree))))    
  4.     (else 0)))  

然而这个算法只适用于普通的情况,以下三种情况就无法处理(正常处理):
1. 只有一个节点的树,(1),返回值为1,貌似正确高度为0;
2. 空树,() ,程序出错
3. 不同的表达方式,(1 2) 等价于 (1 (2)),这种情况下的返回值就变成了2,而不是1

树的深度的算法是一个基于归纳的递归,之所以会产生如上问题,就是处理递归方程有些问题,下面是一种可能的解法:
ruby 代码
 
  1. (define (tree-depth tree)    
  2.   (cond  
  3.     ((and (pair? tree) (pair? (cdr tree))) (+ 1 (apply max (map tree-depth (cdr tree)))))    
  4.     (else 0)))  
  5.   
  6. (tree-depth '(1  2))    ; 1  
  7. (tree-depth '(1  (2)))  ; 1  
  8. (tree-depth '(1 2 3 (4 (5 6) 7) 8))  ;3  
  9. (tree-depth ())    ;0  
  10. (tree-depth '(1))  ;0  
分享到:
评论

相关推荐

    Fluent中的Scheme

    总之,Fluent与Scheme的结合为流体动力学和热传递等领域的研究人员和工程师提供了一个强大的工具集,不仅能够自动化复杂的任务,还能提高仿真效率。通过掌握本文档所述的关键知识点,用户可以更加熟练地使用Scheme来...

    scheme实现唤醒外部app

    在移动应用开发中,"scheme"是一种常见的机制,用于实现应用程序间的交互,即从一个应用启动另一个应用。本文将深入探讨scheme如何实现唤醒外部APP,以及它在Webview和浏览器环境中的应用。 首先,理解scheme的基本...

    android:scheme 通过uri跳转到APP应用指定Activity

    例如,我们可以创建一个名为`myapp`的scheme: ```xml <activity android:name=".MyCustomActivity"> <action android:name="android.intent.action.VIEW" /> <category android:name="android.intent.category...

    Android-scheme-libscheme-lib是一个scheme使用的库

    Scheme-Lib是一个专门为Scheme编程语言设计的库,特别针对Android平台进行了优化和适配。Scheme是一种历史悠久、功能强大的Lisp方言,以其简洁的语法和强大的函数式编程特性著称。在Android平台上使用Scheme-Lib,...

    Fluent Scheme中文手册修订.docx

    Fluent Scheme 是一种基于 Scheme 语言的编程环境,旨在提供一个高效、灵活的解决方案 для scientific computing 和数据分析。以下是 Fluent Scheme 中文手册修订的知识点摘要: 1. Fluent Scheme 简介 Fluent ...

    URl Scheme的使用以及回调

    URL Scheme是一种在应用程序之间建立通信桥梁的技术,它允许一个应用通过特定的协议(即自定义的URL模式)启动另一个应用,并传递数据。在iOS和Android等操作系统中,开发者可以利用URL Scheme实现应用间的深度链接...

    swift:URL Scheme的使用

    首先,我们需要在Info.plist文件中添加一个`CFBundleURLTypes`键,它包含一个数组,每个元素都是一个`CFBundleURLSchemes`键,其值是一个字符串数组,表示我们的自定义URL Scheme。例如,我们可以设置为`myapp`,...

    Scheme跳转的demo

    当一个应用希望监听并响应特定scheme的意图(Intent)时,需要在manifest中声明一个,并设置类别(action)为"android.intent.action.VIEW",数据类型(data)为自定义的scheme。例如: ```xml <activity android:...

    Fluent_Scheme简明中文手册-带书签.pdf

    Fluent-Scheme简明中文手册是为使用Fluent软件进行流体动力学模拟的工程师或学者提供的实用指南,它详细介绍了如何利用Scheme语言扩展和定制Fluent的功能。手册中包含了Scheme语言的基本概念、函数应用、以及如何与...

    android:scheme

    在Android开发中,`android:scheme` 是一个关键的概念,用于定义自定义URL协议,使得外部应用程序或系统可以通过特定的URI来启动我们的应用程序中的特定Activity。这个特性在很多场景下非常有用,比如实现点击链接...

    fluent_scheme语言手册

    根据所提供的文件信息,这是一份FLUENT软件中Scheme编程语言的手册,作者是Mirko Javurek,内容涵盖了如何在FLUENT中使用Scheme语言进行编程。手册由2000年开始撰写,并经过多次更新和扩展。它以德语书写,目前尚未...

    Go-GoScheme-只是用Go编写的另一个Scheme解释器

    总结来说,GoScheme是Go语言与Scheme编程语言的一次创新结合,它提供了一个高效、易读的Scheme解释器实现,既适合于教学,也适用于实际开发场景。通过研究和使用GoScheme,开发者可以同时体验到Go语言的强大力量和...

    Android应用跳转Scheme协议

    在Android开发中,Scheme协议是一种实现应用程序间交互的重要机制。它允许一个应用通过特定的URL格式启动另一个应用,实现应用间的深度链接。本篇将详细探讨Android应用跳转Scheme协议的相关知识点。 首先,理解...

    learn scheme

    ### Scheme语言介绍与计算机科学基础 #### 一、标题与描述概述 - **标题**:“Learn Scheme” - **描述**:“Lisp is a perfect language. Hack language.” 从标题和描述中可以看出,本文档旨在引导读者学习...

    scheme语言中文教程

    Scheme语言是一种Lisp语言的方言,由Guy Lewis Steele Jr.和Gerald Jay Sussman发明,其特点包括...通过仔细学习教程中的每一个章节,初学者可以逐步建立起对Scheme语言的系统性认识,并最终掌握这门强大的编程语言。

    C#实现scheme解释器

    本文将深入探讨如何使用C#来实现一个Scheme解释器,重点介绍涉及的关键技术和步骤。 首先,我们要理解Scheme的基础语法。Scheme语言的核心特征包括: 1. **符号(Symbols)**:在Scheme中,符号是不可变的数据类型...

    FLUENT UDF和FLUENT Scheme混合编程源程序

    1. **变燃烧能力**:`burnerreversingandvariationalburningcapacity.scm`可能是一个Scheme脚本,用于根据特定条件(如炉内温度或时间)改变燃烧器的燃烧能力,模拟实际操作中的不稳定性。 2. **控制逻辑**:Scheme...

    chez scheme windows exe执行查询

    Chez Scheme 是一个功能强大的 Scheme 编程语言实现,由 C 家族的编程语言编写而成,提供高效且兼容 R6RS(第六版 Scheme 报告)的标准。它以其简洁的语法、丰富的库支持以及高度可移植性而受到程序员的喜爱。在 ...

    Teach Yourself Scheme in Fixnum Days

    《Teach Yourself Scheme in Fixnum Days》是一本关于Scheme编程语言的自学教程,本书内容涵盖了从基础到高级的多个知识点,致力于让读者在有限的天数内掌握Scheme编程。在进行知识点梳理之前,我们先对文档内容进行...

Global site tag (gtag.js) - Google Analytics