全民Scheme(0):lat的定义

接下来我会写一写Scheme的学习笔记。嗯,Scheme是属于小众的语言,但合适用来教学的。

什么是lat,就是遍历list里的每个S-expression,如果发现其中某个不是atom的,则返回false,否则返回true。

(define atom?

(lambda (x)

(and (not (pair? x)) (not (null? x)))))

(define lat?

(lambda (l)

(cond

((null? l) #t)

((atom? (car l)) (lat? (cdr l)))

(else #f))))

(lat? ‘())

(lat? ‘(jack sprat could eat no chicken fat))

(lat? ‘((jack) sprat))

(lat? ‘(jack (sprat could) eat))

时间: 2024-08-09 06:32:40

全民Scheme(0):lat的定义的相关文章

oracle11g 数据库导出报“ EXP-00003: 未找到段 (0,0) 的存储定义”错误的解决方案

导出oracle11.2.0.2的服务器的数据时,报"EXP-00003: 未找到段 (0,0) 的存储定义"错误.初步分析是由于数据表是空表导致该问题. Oracle 11G在用EXPORT导出时,空表不能导出 11GR2中有个新特性,当表无数据时,不分配segment,以节省空间 解决方法:一. insert一行,再rollback就产生segment了. 该方法是在在空表中插入数据,再删除,则产生segment.导出时则可导出空表.二. 设置deferred_segment_cr

do{...}while(0)在宏定义中的作用

如果你是一名C程序员,你肯定熟悉宏,它们非常的强大,如果正确使用可以让你的工作事半功倍.然后,如果你在定义宏时,很随意没有认真检查,那么它们可能使得你发狂,浪费N多时间.在很多C程序中,你可能看到许多看起来不是那么直接的较为特殊的宏定义.下面就是一个例子: 1 #define _set_taks_state(tsk, state_value) 2 do{tsk->state = state_value;}while(0) 在Linux内核和其他一些著名的C库中有许多使用do{...}while(

.NET4.0 __doPostBack未定义

方法一.浏览器设置成兼容模式. 方法二.安装服务器版的.Net40的补丁.http://download.csdn.net/detail/5653325/6642051 方法三.点击VS的工具菜单-->库程序包管理器-->程序包管理器控制台(如果没有“库程序包管理器”的菜单,就先点那个“扩展管理器”,安装一个叫“NuGet程序包管理器”,然后就会有了.),点击后下面会出现一个连接PowerShell的控制台,等控制台加载完毕后输入 install-package App_BrowsersUpd

do...while(0)在宏定义中的巧妙用法

大家都知道,do-while(condition)可以表示循环,但你有没有遇到在一些宏定义中可以不用循环的地方,也用到了 do-while.比如: #define DELETE_POINTER(p) do { if(NULL != p) delete p; p = NULL; }while(0) 这时,do-while(0)的功能就不仅仅是循环了,这是do..while(0)的一种巧妙用法.它有以下几种功能: 1.在后面要加分号,使调用如同函数:调用如下: int* p = new int(5)

Oracle导出警告“EXP-00003: 未找到段 (0,0) 的存储定义”解决

环境:CentOS7.4   Oracle11.2.0.4(搭建rac集群) 问题描述:在使用exp命令执行导出的时候,部分表提示“EXP-00003: 未找到段 (0,0) 的存储定义”警告. 问题原因:该问题是因为导出的数据表为空表导致的.Oracle 11GR2当表无数据时,不分配segment,以节省空间,因此在用EXPORT导出时,空表不能导出. 解决方法: 1.使用以下语句查找空表,把查询结果导出执行,强行修改segment值,然后再导出即可导出空表. select 'alter t

全民Scheme(1):数字游戏

刚刚看到两句话,感觉不错,分享给大家: 1.用户的问题,就是我们的问题 2.做一些用户想要的东西 (define add1 (lambda (x) (+ 1 x))) (define sub1 (lambda (x) (- x 1))) (add1 67) (sub1 5) (sub1 0) (zero? 22) (define addup (lambda (tup) (cond ((null? tup) 0) (else (+ (car tup) (addup (cdr tup)))))))

do{}while(0)在宏定义中作用

在开源代码中看到,宏定义经常这样用 #define some() do { do_somt_thing(); } while (0) 为什么这样用? 可以试一下,假如一个普通宏定义 #define some(x) Fun1(x);Fun2(x) if(condition) some(x); 变为 if(condition) Fun1(x); Fun2(x); 这样直接加个花括号不久行了,为什么还用do......while()?假如加上花括号 #define some(x) {Fun1(x);F

解决ios7.0 以后自己定义导航栏左边button靠右的问题

1.自己定义button //左button UIButton *leftBtn = [[UIButton alloc]initWithFrame:RectWithPara(-20, 0, 44, 44)]; [leftBtn addTarget:self action:@selector(btnClicked:) forControlEvents:UIControlEventTouchUpInside];//设置button点击事件 [leftBtn setBackgroundImage:Im

Swift 3.0 闭包的定义和使用

// // ViewController.swift // 闭包的定义和使用 // // Created by 思 彭 on 16/9/17. // Copyright © 2016年 思 彭. All rights reserved. // import UIKit class ViewController: UIViewController { override func viewDidLoad() { super.viewDidLoad() // 1>. 最简单的闭包 ()->()没有参