`
messi_18
  • 浏览: 96487 次
  • 性别: 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)

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

相关推荐

    国外程序员刷题-scheme-for-max:Max/MSP外部脚本和实时编码Maxwiths7SchemeLisp

    是一个开源 Max/MSP 外部,用于使用 Scheme Lisp 启用脚本和实时编码 Max/MSP。 它可以作为 Mac 和 Windows(32 位和 64 位)的软件包以及源代码使用。 它已在 Max 8 上开发和测试,但也可能在 Max 7 上运行,目前...

    安卓“janus”漏洞检测工具

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

    Objective-C开发工具包ytoolkit.zip

    ytoolkit 是 Objective-C 的一个常用开发工具包,包括: 一个快速的base64编码(纯C,及NSData/NSString的category),可以看项目页面的README和代码库里的benchmark,或者在ytoolkitdemo里跑profile一个cocoa附加...

    测试代码生产工具SwiftCov.zip

    SwiftCov 是一个可以产生 Swift 测试代码覆盖信息的工具。 用法:$ swiftcov helpAvailable commands:  generate Generate test code coverage files for your Swift tests   help Display ...

    windows7_u盘启动盘制作工具Rufus汉化版.zip

    Rufus可以将你的windows7光盘映像ISO文件写入U盘,制作出一款可以用来安装WIN7系统的U盘启动盘,通过它你可以自己属于自己的U盘启动盘,支持*.iso光盘映像文件,可以设置文件系统类型为NTFS/FAT32/EXFAT,自定义设置...

    iOS调试工具AllYourMemoriesAreBelong2iOS.zip

    AllYourMemoriesAreBelong2iOS 是一个方便的调试工具,其集成在 iOS 项目中,让开发者在调试过程中可以通过按动 iOS 物理设备的音量键来模拟内存警告通知的产生。该库由 @开源中国真理部部长 使用 Objective-C 语言...

    hadoop工具包及eclipse插件

    包含hadoop工具包及eclipse插件 hadoopbin.zip为工具包,解压官方haddop包之后把hadoopbin解压...hadoop2.8.0 下测试,可以显示Map/Reduce project,但是在DFS Locations下总提示Error:No FileSystem For Scheme:hdfs

    relax:一个微小的发布工具,可在iOS开发中支持多发行版(IPA)

    对于那些不想被代码签名和Xcode东西困扰的iOS开发人员来说,Relax是一个很小的发布工具! 您只需配置scheme和provisioning_profile即可构建存档和IPA文件。 放松会节省您的时间。 很难理解xcodebuild东西,例如...

    JIRA 从入门到精通.doc

    JIRA是一个简单易用的Issue管理和跟踪的工具,运行在JAVA平台上。下载和安装都很容易,按照安装文档,只需要十几分钟就可以搞定,而且还可以为JIRA配置单独的外包数据库(可以使用的数据库有MySQL、MS SQL、Oracle等)...

    DNSiOSLocalizationTestHelpers:因为用不同的语言测试你的 iOS 应用程序是一个巨大的痛苦

    因为用不同的语言测试你的应用程序是一个巨大的痛苦,我把一堆我拼凑起来的工具放到了XCTestCase上的一个类别中。 #Prerequisite:在你的方案中设置语言 为了能够使用这个类,你需要设置你的构建方案以使用特定的...

    iOS自动打包脚本,具有打包、重签名、自动上传及发邮件功能 基于Python开发+源代码+文档说明

    使用`xctool`执行`archive`操作,`xctool`是`FaceBook`开源的一个命令行工具,用来替代苹果的`xcodebuild`工具。下面对xctool的参数和命令进行一个说明。为了能运行shell命令,此项目使用了`Python`的`subprocess`库...

    SVN使用手册中文版快速入门

    我刚刚编译了二进制分发版本,当我尝试检出Subversion,我得到一个“Unrecognized URL scheme”错误。 为什么svn revert命令要有一个明确的目标?为什么缺省不是递归的?它的行为方式与大多数其它子命令不同。 当我...

    CPLD在通信数据传输中的应用.rar

    近年来,随着采用先进的集成工艺和大批量生产,CPLD 器件成本不断下降,集成密度、速度和性能都大幅度提高,这样一个芯片就可以实现一个复杂的数字电路系统;再加上使用方便的开发工具,给设计修改带来很大方便。 ...

    SVN使用手册中文版.chm

    我刚刚编译了二进制分发版本,当我尝试检出Subversion,我得到一个“Unrecognized URL scheme”错误。 为什么svn revert命令要有一个明确的目标?为什么缺省不是递归的?它的行为方式与大多数其它子命令不同。 当我...

    matlab代码影响-kgrid-langs:探索一系列科学计算工具

    目的是生产一种具有与多种编程语言相似的功能的程序,以了解常规科学计算的可用选项。 出于公共利益考虑,该存储库是公开的,但出于好奇的目的; 该代码可能包含“菜鸟错误”和不良样式。 建议使用现有的进行生产...

    FPBench:浮点精度基准的标准

    编译器FPBench为FPCore程序开发了两个编译器工具: export.rkt ,其中出口FPCore计算以如C或JavaScript语言和输入格式,像菊花,Gappa和FPTaylor工具。 transform.rkt ,它应用转换FPCore计算,例如拟定前提条件,...

    stk:与实现无关的单文件R5RS方案库

    Scheme是一种简单但功能强大的语言,具有明确定义的标准。 Scheme并没有持续困扰着更多流行语言(Javascript,Python等)。 在我看来,主要问题是由于生态系统分散,实现之间缺乏可移植性。 我已经决定实现我想使用...

    java实现验证码功能源码-clclojure:clojure到普通lisp的实验端口。还有一些clojure库的原生常见lisp实现,如se

    是一个特别灵活的环境,有一些很酷的工具和一个相当活跃的社区。 我认为将想法从 Clojure 移植到 Common Lisp,最终在 Common Lisp 中实现兼容的 Clojure 会很有趣。 布局 当前 WIP 被分成几个 Common Lisp 文件(仅...

    newlisp.snippet:新的LISP附件模块

    使用共享库的用户可能无法在64位版本上运行(例如zlib.lsp)其他用于编辑Emacs的类型确定库 --iconv库* ck解释器另一个arglist.lsp 文件生成辅助工具垃圾 导入环境pcap_findalldevs.lsp 十六进制转储scheme_button....

    Hadoop权威指南 第二版(中文版)

     运行一个分布式的MapReduce作业  Hadoop的Streaming  Ruby版本  Python版本  Hadoop Pipes  编译运行 第3章 Hadoop分布式文件系统  HDFS的设计  HDFS的概念  数据块  namenode和datanode  命令行接口  ...

Global site tag (gtag.js) - Google Analytics