用Clojure学习The Little Schemer时的一些基本函数定义

;; learning The Little Schemer

(def car first)
(def cdr rest)
(def cons clojure.core/cons)
(def eq? =)
(def list? clojure.core/list?)
(defn atom? [x]
  (not (list? x)))

(defn s-exp? [x]
  (or (atom? x) (list? x)))

(defn null? [x]
  (if (atom? x) (car x) ;raise a exception
      (and (list? x) (empty? x))))

抛出异常的地方是为了保持“未定义”语义,即书中说到的 “you cannot do this”

用Clojure学习The Little Schemer时的一些基本函数定义

时间: 2024-10-04 02:54:23

用Clojure学习The Little Schemer时的一些基本函数定义的相关文章

学习java窗口基本操作时无聊写的

学习java窗口基本操作时无聊写的 就当记录 代码如下: package day08; import java.awt.BorderLayout;import java.awt.Color;import java.awt.FlowLayout;import java.awt.Font;import java.awt.GridLayout; import javax.swing.JButton;import javax.swing.JFrame;import javax.swing.JLabel;

【转】easyui $.message.alert 点击右上角的关闭按钮时,不执行定义的回调函数

今天發現這個問題 easyui  $.message.alert  点击右上角的关闭按钮时,不执行定义的回调函数

类定义下标操作符时,为什么需要定义两个版本

类定义下标操作符时,一般需要定义两个版本: 1. 作为类的非const成员函数,返回引用: 2. 作为类的const成员函数,返回const引用. 首先,什么是类的const成员函数,也就是不改变对象的成员函数.表示方法就是在类的成员函数的声明和定义后面加上const. 类的有些对象可能可以改变,有的不能改变,举个例子来说,对于string对象来说,有的我们可能希望定义的string对象可以改变,有的则不能改变: string str1= "abcdefg"; const string

explicit:C++规定,当定义了只有一个参数的构造函数时,同时也定义了一种隐式的类型转换

explicit研究 explicit是C++中的关键字,不是C语言中的.英文直译是“明确的”.“显式的”意思.出现这个关键字的原因,是在C++中有这样规定的基础上:当定义了只有一个参数的构造函数时,同时也定义了一种隐式的类型转换.先看类型转换. http://blog.csdn.net/guodongxiaren/article/details/24455653

【学习笔记】【C语言】宏定义

1.宏定义可以分为2种:不带参数的宏定义 带参数的宏定义 2.定义 一般形式#define 宏名 字符串比如  #define ABC 10右边的字符串也可以省略,比如#define ABC 3.作用 它的作用是在编译预处理时,将源程序中所有"宏名"替换成右边的"字符串",常用来定义常量.接下来写个程序根据圆的半径计算周长 4.例子 在第4行定义了一个叫PI的宏,在编译预处理之后,第8行中的2 * PI *radius就会变成2 * 3.14 * radius. 1

Effective C++ Item 46 需要类型转换时请为模板定义非成员函数

本文为senlie原创,转载请保留此地址:http://blog.csdn.net/zhengsenlie 经验:当我们编写一个 class template, 而它所提供之"与此 template 相关的"函数支持"所有参数之隐式类型转换"时,请将那些函数定义为 "class template内部的 friend 函数". 示例: template<typename T> class Rational{ public: Ration

Clojure学习笔记(一)——介绍、安装和语法

什么是Clojure Clojure是一种动态的.强类型的.寄居在JVM上的语言. Clojure的特性: 函数式编程基础,包括一套性能可以和典型可变数据结构媲美的持久性数据结构 由JVM提供的成熟的.高效的运行时环境:所以Clojure可以使用Java类库,反之Clojure库也可以被Java使用 跟JVM/Java的互操作能力使得很多架构.运维方面的需求可以得到满足:Clojure代码可以像Java代码一样被打包,然后部署到任何Java应用可以部署的地方 一套提供并发.并行语义的机制:Clo

Clojure学习03:数据结构(集合)

Clojure提供了几种强大的数据结构(集合) 一.集合种类 1.vector 相当于数组,如: [2  3   5]  ,  ["ad"  "adas"  "adadsads"] 2.list 相当于链表,如: '(2  3   5)  ,  '("ad"  "adas"  "adadsads") 与vector相比,[]变成了() ,又因为 ()符号是用于函数调用,为了区别,需要在

学习爬虫框架scrapy时的一些收获

scrapy作为python中的一个爬虫框架,功能十分强大,内部实现了twisted的异步调用,在一定程度上提升了运行效率,并且由于scrapy爬虫有着相对固定的结构,内部封装了众多功能,因此只要逻辑清晰,初步掌握scrapy还是比较容易的.作为一个小白,刚刚接触scrapy,计划用scrapy爬取知乎上感兴趣的话题以及其热门问答,现记录一下自己在学习中的一些感悟,如果有不对的地方欢迎指正. 1. 爬取知乎第一步是模拟登录,关于模拟登陆知乎的技术文章有很多,大体思路都是先获取_xsrf以及验证码