Common Lisp提供了大量的输入输出功能。我们已经使用的格式功能,打印输出功能。在本节中,我们将探讨一些在LISP提供了最常用的输入输出功能。

输入函数

下表提供了LISP的最常用的输入功能:

SL No.

函数和说明

1

read&optionalinput-stream eof-error-p eof-value recursive-p

它读取一个Lisp对象从输入流的打印形式,建立相应的Lisp对象,并返回该对象。

2

read-preserving-whitespace&optionalin-stream eof-error-p eof-value recursive-p

这是用在一些特殊情况下,最好是确定扩展令牌正好是字符结束。

3

read-line&optionalinput-stream eof-error-p eof-value recursive-p

它读取一个文本行由换行符终止。

4

read-char&optionalinput-stream eof-error-p eof-value recursive-p

这需要一个字符从输入流并将其作为一个字符的对象。

5

unread-charcharacter &optional input-stream

它把最近从输入流中读取的字符,到输入数据流的前部。

6

peek-char&optionalpeek-type input-stream eof-error-p eof-value recursive-p

它返回的下一个字符被从输入流中读取,而无需实际从输入流中除去它。

7

listen&optionalinput-stream

谓词监听为true如果有立即从输入流中的字符,如果不是则为false。

8

read-char-no-hang&optionalinput-stream eof-error-p eof-value recursive-p

它类似于read-char字符,但是如果它没有得到一个字符,它不会等待一个字符,但立即返回为nil。

9

clear-input&optionalinput-stream

它清除与输入流关联的所有缓冲的输入。

10

read-from-stringstring&optionaleof-error-p eof-value &key :start :end :preserve-whitespace

它采用字符串的字符,并相继建立一个LISP的对象,并返回该对象。它也返回第一个字符的索引无法读取字符串或字符串(或长度+1)的长度,视具体情况而定。

11

parse-integerstring &key :start :end :radix :junk-allowed

它会检查字符串的子串被分隔:start 和:end(默认为字符串的开头和结尾)。它会跳过空白字符,然后尝试解析一个整数。

12

read-bytebinary-input-stream&optionaleof-error-p eof-value

它读取1字节的二进制输入流并将其返回一个整数的形式。

读取键盘的输入

read 函数用于从键盘输入。也可以不带任何参数。

例如,考虑代码片段:

(write(+15.0(read)))

假设用户输入10.2 来自stdin 输入,它返回,

25.2

read 函数从输入流中读取字符,并通过解析为Lisp对象的表示解释它们。

示例

创建一个名为main.lisp一个新的源代码文件,并在其中输入如下代码:

;thefunctionAreaOfCircle;calculates area of a circle;whenthe radiusisinputfromkeyboard(defunAreaOfCircle()(terpri)(princ"Enter Radius: ")(setq radius(read))(setq area(*3.1416radius radius))(princ"Area: ")(write area))(AreaOfCircle)

当执行代码,它返回以下结果:

EnterRadius:5(STDINInput)Area:78.53999

示例

创建一个名为main.lisp一个新的源代码文件,并在其中输入如下代码:

(with-input-from-string(stream"Welcome to Tutorials Yiibai!")(print(read-charstream))(print(read-charstream))(print(read-charstream))(print(read-charstream))(print(read-charstream))(print(read-charstream))(print(read-charstream))(print(read-charstream))(print(read-charstream))(print(read-charstream))(print(peek-charnilstreamnil'the-end)) (values))

当执行代码,它返回以下结果:

#W#e#l#c#o#m#e#Space##o#Space

输出功能

在LISP所有的输出函数都有一个称为输出流可选参数,其输出传送。如果没有提及或nil,输出流默认为变量*标准输出*的值。

下表提供了LISP的最常用的输出函数:

SL No.

函数和说明

1

writeobject&key :stream :escape :radix :base :circle :pretty :level :length :case :gensym :array

writeobject&key :stream :escape :radix :base :circle :pretty :level :length :case :gensym :array :readably :right-margin :miser-width :lines :pprint-dispatch

既写对象通过指定的输出流:stream,默认为标准输出*值*。其他值默认为打印设置相应的全局变量。

2

prin1object&optionaloutput-stream

printobject&optionaloutput-stream

pprintobject&optionaloutput-stream

princobject&optionaloutput-stream

所有这些函数对象的打印形式输出到输出流。但是,下面的不同之处有:

prin1 返回对象作为其值。

print 打印与前一个换行符的目标和后跟一个空格。它返回的对象。

pprint 就像印刷不同之处在于省略了结尾间隔。

princ 就像prin1除了输出没有转义字符。

3

write-to-stringobject &key:escape :radix :base :circle :pretty :level :length :case :gensym :array

write-to-stringobject&key :escape :radix :base :circle :pretty :level :length :case :gensym :array :readably :right-margin :miser-width :lines :pprint-dispatch

prin1-to-stringobject

princ-to-stringobject

该对象被有效地打印和输出的字符被转成一个字符串,并将该字符串返回。

4

write-charcharacter&optionaloutput-stream

它输出的字符输出流,并返回字符。

5

write-stringstring&optionaloutput-stream&key :start :end

它写入字符串的指定子字符串的字符输出流。

6

write-linestring&optionaloutput-stream&key :start :end

它的工作原理与write-string的方式相同,但是之后输出一个换行符。

7

terpri&optionaloutput-stream

它输出一个换行符到output-stream。

8

fresh-line&optionaloutput-stream

它只输出一个换行,如果流不是已经在一行的开始。

9

finish-output&optionaloutput-stream

force-output&optionaloutput-stream

clear-output&optionaloutput-stream

函数finish-output尝试确保发送到输出流的所有输出已达到其目标,然后才返回nil。

函数force-output发起的任何内部缓冲区清空,但返回nil,而无需等待完成或确认。

函数clear-output 尝试中止,以便使尽可能少的输出继续到目标中的任何出色的输出操作。

10

write-byteinteger binary-output-stream

它写入一个字节,整数的值。

示例

创建一个名为main.lisp一个新的源代码文件,并在其中输入如下代码:

;thisprogram inputs a numbersanddoubles it(defunDoubleNumber()(terpri)(princ"Enter Number : ")(setq n1(read))(setq doubled(*2.0n1))(princ"The Number: ")(write n1)(terpri)(princ"The Number Doubled: ")(write doubled))(DoubleNumber)

当执行代码,它返回以下结果:

EnterNumber:3456.78(STDINInput)TheNumber:3456.78TheNumberDoubled:6913.56

格式化输出

format函数是用于生产很好的格式化文本。它的语法如下:

format destination control-string&rest arguments

那么,

destination是一个标准输出

control-string持有的字符要被输出和打印指令。

format directive由符号(〜)的,用逗号,可选的冒号(:)和符号(@)修饰符和一个字符指明了哪些指令是分开的可选前缀参数。

前缀参数一般都是整数,记载为可选符号十进制数。

下表提供了常用的指令的简要说明:

指令

描述

~A

后跟ASCII码参数

~S

后跟S-表达式

~D

为十进制参数

~B

用于二进制参数

~O

用于八进制参数

~X

用于十六进制参数

~C

用于字符参数

~F

用于固定格式的浮点参数。

~E

指数浮点参数

~$

美元和浮点参数。

~%

被打印新的一行

~*

被忽略的下一个参数

~?

间接。下一个参数必须是一个字符串,一个接一个列表。

示例

让我们重写程序计算圆的面积:

创建一个名为main.lisp一个新的源代码文件,并在其中输入如下代码:

(defunAreaOfCircle()(terpri)(princ"Enter Radius: ")(setq radius(read))(setq area(*3.1416radius radius))(format t"Radius: = ~F~% Area = ~F"radius area))(AreaOfCircle)

当执行代码,它返回以下结果:

EnterRadius:10.234(STDINInput)Radius:=10.234Area=329.03473

¥ 我要打赏 纠错/补充 收藏

lisp princ详解_LISP – 输入和输出相关推荐

  1. Siri详解之输入系统和活跃本体(转)

    Siri详解之输入系统和活跃本体(转) 文 / 张俊林 Siri是iPhone 4S内置的智能语音识别系统,吸引了许多用户的关注.本文将从技术层面详解Siri,主要讲述输入系统和活跃本体两部分内容. ...

  2. c 语言的输出函数cout,详解C++ cout格式化输出完全攻略

    写算法题的时候突然发现自己忘记基本的C++:cout格式化输出了,赶紧拉出以前的C++学习笔记重新看一看. 部分内容来自教程:C语言中文网(一个很棒的网站) 有时希望按照一定的格式进行输出,如按十六进 ...

  3. [pytorch]yolov3.cfg参数详解(每层输出及route、yolo、shortcut层详解)

    文章目录 Backbone(Darknet53) 第一次下采样(to 208) 第二次下采样(to 104) 第三次下采样(to 52) 第四次下采样(to 26) 第五次下采样(to 13) YOL ...

  4. python 多数据输出到txt_详解python读取和输出到txt

    读取txt的数据和把数据保存到txt中是经常要用到的,下面我就总结一下. 读txt文件 python常用的读取文件函数有三种read().readline().readlines() 以读取上述txt ...

  5. iostat命令详解_对iostat输出结果的理解

    前言: 日常工作中,线上服务会出现各种奇奇怪怪的问题,每次出现问题都是根据现象猜测出现问题的原因,比如请求响应慢了,就排查整个请求的逻辑,每一步花了多少时间,分析半天终于发现是某一步慢了以后,在分析为 ...

  6. JS常用的输出内容的方式详解(5种输出方式)

    1.alert("要输出的内容"); ->在浏览器中弹出一个对话框,然后把要输出的内容展示出来 ->alert都是把要输出的内容首先转换为字符串然后在输出的 2.doc ...

  7. python文件输入符_python基础入门详解(文件输入/输出 内建类型 字典操作使用方法)...

    一.变量和表达式 >>> 1 + 1 2 >>> print 'hello world' hello world >>> x = 1 >&g ...

  8. keras train_on_batch详解(train_on_batch的输出输入详解,train_on_batch多GPU训练详解,自定义学习率调整策略)

    利用 train_on_batch 精细管理训练过程 大部分使用 keras 的同学使用 fit() 或者 fit_generator() 进行模型训练, 这两个 api 对于刚接触深度学习的同学非常 ...

  9. python循环控制语句将数值转化成字符串_python基础入门详解(文件输入/输出内建类型字典操作使用方法)...

    f=open("foo.txt") line=f.readline() while line: print line, line=f.readline() #读取一行,包括换行符' ...

  10. python输入输出流详解_输入输出流的概念

    Java中的文件复制相较Python而言,涉及到输入输出流的概念,实现中会调用很多对象,复杂很多,在此以文件复制进行简单总结. 这里是一个简单的处理代码: import java.io.*; publ ...

最新文章

  1. linux数据库创建score表,MySQL数据库学习笔记
  2. 前端每周清单第 50 期: AngularJS and Long Term Support, Web 安全二三论
  3. python获取输入框内容长度_python3 tkinter 获取输入字符串长度
  4. 编程入门:C语言基础知识全网超全不用到处找了!
  5. 黑科技揭秘:百种异常随机注入,专有云为何稳如泰山
  6. 多频法如何解包裹相位?
  7. HTTP之缓存 Cache-Control
  8. 系统架构(1)---单机至亿级流量大型网站系统架构演进
  9. 天津理工大学计算机调剂信息,天津理工大学2020考研调剂信息
  10. 圆为什么有360度?
  11. svn分支合并到主干(Merge)
  12. 程序员教你玩转电脑手机
  13. python儿童-少儿Python创意编程课
  14. unity 陶瓷质感_Unity2D:简单自动瓷砖(Tile)的实现
  15. CATIA无法连接到服务器解决方案
  16. Jzoj2197 三核苷酸
  17. 怎么建一个新的微信群?微信小技巧
  18. Class names should use CamelCase convention
  19. 微信小程序开发(十二)富文本插件wxParse的使用
  20. 【Kaldi 新手入门】手把手教你搭建简易英文数字ASR系统

热门文章

  1. 浏览器打开后自动打开某个页面
  2. 求导计算机在线,求导计算器
  3. 如何应对硬盘无法识别通电异响等那些七七八八的物理故障
  4. TCP 的拥塞控制方法 ----AIMD
  5. Linux——eth0,eth1,eth2,lo及ifconfig命令
  6. Rust编程语言入门教程(二)-核心概念(所有权(Ownership) 和生命周期)、变量声明(遍历数组)
  7. ora-01045 :user system lacks create session privilege; logon denied
  8. WeAPI android ios,WechatOpenSDK 1.8.6 iOS接入指南
  9. C# 创建桌面快捷方式
  10. 软件人员kpi制定模板_软件部门绩效考核表