mysql 返回 pair_Scheme 中的 pair 和 list 简述

pair

(cons 1 2)

> (1 . 2)

系统返回(1 . 2)。cons 操作给两个地址分配了内存空间,并把存放指向 1 的地址放在一个空间,把存放指向2的地址放在另一个空间。存放指向1的地址的内存空间被称作 car 部分,对应的,存放指向2的地址的内存空间被称作 cdr 部分。

car 和 cdr 分别是寄存器地址部分(Contents of the Address part of the Register)和寄存器减量部分(Contents of the Decrement part of the Register)的简称。这些名字最初来源于 Lisp 首次被实现所使用的硬件环境中内存空间的名字。这些名字同时也表明 Cons 单元的本质就是一个内存空间。

cons 这个名字是术语构造(construction)的简称。

(cons 1 (cons 2 (cons 3 (cons 4 5))))

=> (1 2 3 4 . 5)

(1 2 3 4 . 5) 是对 (1 . (2 . (3 . (4 . 5)))) 的一种简化。

> (cadr f)

2

> (car (cdr f)) ;等价

2

> (define f (cons 1 (cons 2 (cons 3 (cons 4 5)))))

> f

(1 2 3 4 . 5)

> (car f)

1

> (cdr f)

(2 3 4 . 5)

> (cadr f)

2

> (define f (cons 1 (cons 2 (cons 3 (cons 4 (cons 5 6))))))

> f

(1 2 3 4 5 . 6)

> (cddddr f)

(5 . 6)

> (cdddddr f)

. . cdddddr: undefined;

cannot reference undefined identifier

最多支持四级操作。c...r

> (define f (cons 1 2))

> f

(1 . 2)

> (set-car! f 10)

> f

(10 . 2)

> (set-cdr! f 20)

> f

(10 . 20)

> (define f (cons 1 (cons 2 3)))

> f

(1 2 . 3)

> (set-cdr! f 4)

> f

(1 . 4)

使用 set-car! 或 set-cdr! 修改 .

list

> '(1 2 3)

(1 2 3)

> (list 1 2 3)

(1 2 3)

> (define f (list 1 2 3))

> f

(1 2 3)

> (list-ref f 0) ;通过索引取值

1

> (list-ref f 2)

3

> (list-tail f 2) ;返回给定索引及以后的所有值

(3)

> (list-tail f 0)

(1 2 3)

pair?, list? 和 null? 判断过程可以分别用来检查它们的参数是不是一个序对,列表或空列表。

Scheme 中的 booleans 类型用 #t、#f 来分别表示 true 和 false 。

> (pair? '(1 . 2))

#t

> (pair? '(1 2))

#t

> (pair? '())

#f

> (pair? '(1 . 2))

#t

> (pair? '(cons 1 2))

#t

> (pair? '(1 2 3))

#t

> (pair? (list 1 2 3))

#t

> (list? '(1 2 3))

#t

> (list? (cons 1 2))

#f

> (list? (cons 1 (cons 2 3)))

#f

> (list? (cons 1 (cons 2 '())))

#t

> (list? (cons 1 '()))

#t

> (null? '())

#t

> (list 1 2 3 4)

(1 2 3 4)

> (define f (cons 1 (cons 2 (cons 3 (cons 4 '())))))

> f

(1 2 3 4)

> (list? f)

#t

25db64f9aa3333f22bd24fd540cc2e89.png

连续的点对且以nil('())结尾,形似 C语言 的链表,而用list?判断得到的结果也为真。

在 SICP 一书中 nil 用于表示序对 ( pair ) 的链结束,也可以当作一个不包含任何元素的序列,空表。

不过作者推荐直接使用 '() 表示空表,而舍弃变量 nil 。

> (define f (list 1 2 3 4))

> f

(1 2 3 4)

> (car f)

1

> (cdr f)

(2 3 4)

> (cddr f)

(3 4)

> (caddr f)

3

可以向前面一样使用 car 和 cdr 。

> (define x '(1 2 3))

> (define y '(4 5 6))

> (define z (append x y)) ;合并两个 list

> z

(1 2 3 4 5 6)

> x

(1 2 3)

> y

(4 5 6)

Scheme中一些函数在C++里面的实现与吐槽

最终我失败了,这是显而意见,我试图在一个很看重类型是什么的语言中实现无类型操作,事实上,哪怕我实现了基本的cons,car,cdr,list后面的代码也无法写下去.比如说list-n,根据 ...

Eclipse中配置SVN(步骤简述)

————Eclipse中配置SVN(步骤简述)———— 1.有客户端(tortoiseSVN),服务器端(visualSVN) 两种,根据需要安装,安装后需重启电脑 2.服务器端配置:创建版本库(放工 ...

C++中的pair,make_pair学习

std::pair主要的作用是将两个数据组合成一个数据,两个数据可以是同一类型或者不同类型.例如std::pair 或者 std::pair

spark中的pair rdd,看这一篇就够了

本文始发于个人公众号:TechFlow,原创不易,求个关注 今天是spark专题的第四篇文章,我们一起来看下Pair RDD. 定义 在之前的文章当中,我们已经熟悉了RDD的相关概念,也了解了RDD基 ...

Python中的file和open简述

help(file) help(open) 老规矩先看一下内置的帮助文档怎么描述file和open,毕竟官方文档是最直接最准确的描述. Help on class file in module __b ...

scheme 中的宏使用

#lang scheme ( define-syntax my-when     ( syntax-rules ()       [ ( _ pred body ... )         ( if ...

MySQL中的SQL流程分析简述

分析MySQL中这条语句的整个流程 update table_a set c1=xx where c2=xxx 朋友考我的一个问题在此处列出个人见解 1 客户端连接进来首先进行权限验证 2 验证通过后 ...

vector中插入pair

我们知道map和multimap的作用,这两种数据类型在存储数据时,会根据pair<>的first成员进行排序,不同的时前者将不会插入对first成员重复的结构,后者可以.那如果我们只想存 ...

Zookeeper中的FastLeaderElection选举算法简述

Zookeeper是一个开源的分布式应用协调项目, 当中为了保证各节点的协同工作,Zookeeper在工作时须要有一个Leader. 而Leader是怎样被选举出来的?Zookeep中使用的缺省算法称 ...

随机推荐

【JUC】JDK1&period;8源码分析之CyclicBarrier(四)

一.前言 有了前面分析的基础,现在,接着分析CyclicBarrier源码,CyclicBarrier类在进行多线程编程时使用很多,比如,你希望创建一组任务,它们并行执行工作,然后在进行下一个步骤之前 ...

&lbrack;深入浅出WP8&period;1&lpar;Runtime&rpar;&rsqb;文本块(TextBlock)

4.3 文本块(TextBlock) 文本块(TextBlock)控件是用于显示少量文本的轻量控件,可以通过TextBlock呈现只读的文本,你可以把TextBlock控件理解为一种纯文本的展示控件. ...

okhttp 基本介绍

资料汇总 官网:http://square.github.io/okhttp/ 文档:https://github.com/square/okhttp/wiki GitHub:https://gith ...

latch&colon;library cache

一:硬解析造成的shared pool latch 争用: 每一个sql被执行之前,先要到library cache中根据hash_value查找parent cursor,这就需要先获得librar ...

PHP DES加密

public function encrypt($str) { //$str = "hh"; $key = "key:123";//密钥 $cipher = M ...

Fiddler设置代理(PC和Android)

Fiddler设置 打开Fiddler,进入Tools--->Fiddler Options,勾选以下信息:   OK,就配置完成了.   PC端设置: 以火狐为例,打开选项--->高级 ...

Linux之用户与用户组

1.Linux是一种 多用户多任务分时操作系统. 2.Linux的用户只有两个等级:root用户和非root用户.   Linux系统默认 内置了root用户 和一些非root用户,如nobody,a ...

Linux&&num;160&semi;时间及时区设置

时间以及时区设置 by:授客 QQ:1033553122 1.首先确认使用utc还是local time. UTC(Universal Time Coordinated)=GMT(Greenwich ...

Codeforces 264 B&period; Good Sequences

B. Good Sequences time limit per test 2 seconds memory limit per test 256 megabytes input standard i ...

HDU - 5130 :Signal Interference (多边形与圆的交)

pro:A的监视区域是一个多边形. 如果A的监视区的内满足到A的距离到不超过到B的距离的K倍的面积大小.K<1 sol:高中几何体经验告诉我们满足题意的区域是个圆,那么就是求圆与多边形的交. # ...

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值