`
messi_18
  • 浏览: 98772 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

自己写一个scheme测试工具

 
阅读更多
端午在家休息了好几天,基本上就是带孩子和睡觉了。荒废了好几天之后,今天重操旧业。
The Little Scheme看到第99页了。要写一个函数numbered?来判断一个表达式是否是数字表达式。
上代码:
(define atom?
  (lambda (a)
    (not (or (null? a) (pair? a)))))
(define operator?
    (lambda (op)
      (or (eq? (quote +) op) (eq? (quote -) op) (eq? (quote *) op) (eq? (quote /) op))))
(define numbered?
  (lambda (lat)
    (cond
      ((atom? lat) (number? lat))
      ((null? lat) #f)
      ((null? (cdr lat)) #f)
      ((null? (cdr (cdr lat))) #f)
      (else (and (numbered? (car lat)) (operator? (car (cdr lat))) (numbered? (car (cdr (cdr lat)))))))))

然后我自己写了一系列的测试用例来测试上面的函数。但是,慢慢的觉得这样太麻烦了。开始萌生自己写个测试工具的想法:我提供测试用例,工具来把参数传给被测试的函数,再把得到结果与预期结果相比较。这有点像JUnit中的AssertEqual。

时间不长写出来了,名字就叫testN吧。
上代码:
(define testN
  (lambda (func test-cases)
    (cond
      ((null? test-cases) '())
      (else (map (lambda (it)
                   (eq? (apply func (list (car it))) (car (cdr it)))) test-cases)))))

那来测一下之前写的函数numbered?
(testN numbered? '(
                   (1 #t) 
                   ('a #f)
                   (() #f)
                   ((1) #f)
                   ((1 2) #f)
                   ((1 'a) #f)
                   ((1 + 2) #t)
                   ((1 + (1 + 2)) #t)
                   ((1 + (1 2)) #f)
                   (((1 + 2) + (1 + 9)) #t)
                   (((1 2) + (1 + 2)) #f)
                            ))

结果是:
'(#t #t #t #t #t #t #t #t #t #t #t)

哈哈,通过了。
分享到:
评论

相关推荐

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

    Scheme-Lib为Android开发者提供了一个独特的工具,允许他们在应用程序中利用Scheme的强大功能。它不仅可以帮助简化某些任务,还可以提高代码的可读性和可维护性。尽管目前主要针对Android,未来可能的多平台支持将使...

    scheme实现唤醒外部app

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

    swift:URL Scheme的使用

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

    Scheme语言基础教程

    - **交互式评估器**:Scheme拥有一个交互式的评估环境,可以即时测试代码的效果,非常适合学习和调试。 - **教育和研究领域的应用**:自1975年以来,Scheme就被广泛应用于教育和研究领域,尤其是在计算机科学的教学...

    scheme STk

    这个开发环境对于初学者来说是一个理想的平台,因为它允许他们快速测试代码并实时查看结果,有助于理解和掌握Scheme的基本概念和高级特性。 在"STk-win32"这个压缩包中,我们可以推断出这是专为Windows 32位操作...

    scheme解释器 C#实现

    在本项目中,我们将探讨如何使用C#来实现一个Scheme解释器。 首先,我们需要理解Scheme的基本语法和数据结构。Scheme的核心在于其 Lisp-like 的括号表示法,即S-表达式(S-expression)。这些表达式可以是原子(如...

    Scheme学习资料

    其次,Scheme采用了一种叫做“读-求值-打印循环”(Read-Eval-Print Loop,简称REPL)的交互式开发环境,这使得程序员能够快速测试和调试代码。了解如何有效地使用REPL,可以极大地提高学习效率。 再者,Scheme的...

    Scheme 语言概要(上)

    一个Scheme程序可以由一个或多个form组成,通常用小括号括起来。例如: ```scheme (define x 123) (+ 1 2) (* 4 5 6) (display "hello world") ``` 这些form可以是表达式、变量定义或过程。 **Form嵌套:** Scheme...

    验证URL Scheme

    在iOS和Android等移动操作系统中,开发者可以为自己的应用定义一个唯一的URL Scheme,使得其他应用或系统可以通过特定的URL格式启动该应用,并执行特定的操作。 标题“验证URL Scheme”指的是检查并确认一个URL是否...

    Color Scheme Designer 3 网页版

    总结来说,Color Scheme Designer 3 是一个强大而全面的网页配色工具,能够帮助设计师快速生成和测试色彩方案,同时考虑到了色彩理论、可用性和跨平台兼容性。通过使用这个工具,设计师可以提升其作品的专业性和吸引...

    通过超链接url打开一些常见app(scheme)

    在Android开发中,"通过超链接URL打开一些常见APP(scheme)"是一个常见的功能,它涉及到应用程序间的交互和深度链接技术。此功能允许用户点击一个链接,比如在浏览器或者社交媒体应用中,然后直接跳转到特定的应用...

    常用的URL Scheme.zip_URL ios 跳转界面_Url-scheme大全_url scheme ios

    总结来说,URL Scheme是iOS开发中的一个重要工具,它提供了灵活的应用间通信方式,使得开发者可以创建深度链接,实现界面跳转,增强用户体验。通过正确配置和使用URL Scheme,开发者能够创建更加丰富和互动的应用...

    mit-scheme源代码

    MIT-Scheme是一个基于Lisp方言的解释器,由麻省理工学院(MIT)开发,广泛用于教学、研究和软件开发。它以其高效、简洁和高度可扩展性而著称。源代码的提供为开发者提供了深入理解Lisp语言及其实现机制的机会,同时...

    mit-scheme的基本使用教程

    MIT-Scheme是一个强大的Scheme实现,无论是在命令行还是在Emacs下,都能提供优秀的编程体验。通过学习本教程,你将掌握如何使用MIT-Scheme进行编程,包括基础操作和高级功能。同时,提供的相关文件将帮助你在实践中...

    安卓“janus”漏洞检测工具

    在安卓5.0到8.0系统中,所有基于signature scheme V1签名机制的App均受“Janus”漏洞影响。 仅基于signature scheme V2签名的APP在安卓7.0及以上版本系统中不受影响 “Janus”漏洞只针对于安卓5.0-8.0系统下、基于...

    A_Tour_of_Scheme_in_Gambit

    - **递归的概念**:递归是Scheme中的一个重要概念,通常用于处理重复性的任务。 - **尾调用优化**:Scheme编译器支持尾调用优化(tail call optimization),这使得递归函数能够高效地执行,避免栈溢出问题。 #### ...

    StartApp.zip

    【StartApp.zip】是一个压缩包,包含了一个简单的Android demo项目,其主要目的是通过Android的scheme机制来启动应用程序。在这个demo中,你可以了解到如何利用自定义的scheme地址来判断并启动相应的App。下面是这个...

    HomeKit的setupcode及qrCode生成工具源码

    在这个特定的上下文中,我们讨论的是一个用于生成HomeKit的`setupcode`和`qrCode`的工具源码。这个工具特别之处在于它能够根据不同的配置生成以`X-HM://`开头的二维码,这种二维码是HomeKit设备设置过程中的关键组成...

Global site tag (gtag.js) - Google Analytics