lisp princ详解_LISP – 输入和输出
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 – 输入和输出相关推荐
- Siri详解之输入系统和活跃本体(转)
Siri详解之输入系统和活跃本体(转) 文 / 张俊林 Siri是iPhone 4S内置的智能语音识别系统,吸引了许多用户的关注.本文将从技术层面详解Siri,主要讲述输入系统和活跃本体两部分内容. ...
- c 语言的输出函数cout,详解C++ cout格式化输出完全攻略
写算法题的时候突然发现自己忘记基本的C++:cout格式化输出了,赶紧拉出以前的C++学习笔记重新看一看. 部分内容来自教程:C语言中文网(一个很棒的网站) 有时希望按照一定的格式进行输出,如按十六进 ...
- [pytorch]yolov3.cfg参数详解(每层输出及route、yolo、shortcut层详解)
文章目录 Backbone(Darknet53) 第一次下采样(to 208) 第二次下采样(to 104) 第三次下采样(to 52) 第四次下采样(to 26) 第五次下采样(to 13) YOL ...
- python 多数据输出到txt_详解python读取和输出到txt
读取txt的数据和把数据保存到txt中是经常要用到的,下面我就总结一下. 读txt文件 python常用的读取文件函数有三种read().readline().readlines() 以读取上述txt ...
- iostat命令详解_对iostat输出结果的理解
前言: 日常工作中,线上服务会出现各种奇奇怪怪的问题,每次出现问题都是根据现象猜测出现问题的原因,比如请求响应慢了,就排查整个请求的逻辑,每一步花了多少时间,分析半天终于发现是某一步慢了以后,在分析为 ...
- JS常用的输出内容的方式详解(5种输出方式)
1.alert("要输出的内容"); ->在浏览器中弹出一个对话框,然后把要输出的内容展示出来 ->alert都是把要输出的内容首先转换为字符串然后在输出的 2.doc ...
- python文件输入符_python基础入门详解(文件输入/输出 内建类型 字典操作使用方法)...
一.变量和表达式 >>> 1 + 1 2 >>> print 'hello world' hello world >>> x = 1 >&g ...
- keras train_on_batch详解(train_on_batch的输出输入详解,train_on_batch多GPU训练详解,自定义学习率调整策略)
利用 train_on_batch 精细管理训练过程 大部分使用 keras 的同学使用 fit() 或者 fit_generator() 进行模型训练, 这两个 api 对于刚接触深度学习的同学非常 ...
- python循环控制语句将数值转化成字符串_python基础入门详解(文件输入/输出内建类型字典操作使用方法)...
f=open("foo.txt") line=f.readline() while line: print line, line=f.readline() #读取一行,包括换行符' ...
- python输入输出流详解_输入输出流的概念
Java中的文件复制相较Python而言,涉及到输入输出流的概念,实现中会调用很多对象,复杂很多,在此以文件复制进行简单总结. 这里是一个简单的处理代码: import java.io.*; publ ...
最新文章
- linux数据库创建score表,MySQL数据库学习笔记
- 前端每周清单第 50 期: AngularJS and Long Term Support, Web 安全二三论
- python获取输入框内容长度_python3 tkinter 获取输入字符串长度
- 编程入门:C语言基础知识全网超全不用到处找了!
- 黑科技揭秘:百种异常随机注入,专有云为何稳如泰山
- 多频法如何解包裹相位?
- HTTP之缓存 Cache-Control
- 系统架构(1)---单机至亿级流量大型网站系统架构演进
- 天津理工大学计算机调剂信息,天津理工大学2020考研调剂信息
- 圆为什么有360度?
- svn分支合并到主干(Merge)
- 程序员教你玩转电脑手机
- python儿童-少儿Python创意编程课
- unity 陶瓷质感_Unity2D:简单自动瓷砖(Tile)的实现
- CATIA无法连接到服务器解决方案
- Jzoj2197 三核苷酸
- 怎么建一个新的微信群?微信小技巧
- Class names should use CamelCase convention
- 微信小程序开发(十二)富文本插件wxParse的使用
- 【Kaldi 新手入门】手把手教你搭建简易英文数字ASR系统
热门文章
- 浏览器打开后自动打开某个页面
- 求导计算机在线,求导计算器
- 如何应对硬盘无法识别通电异响等那些七七八八的物理故障
- TCP 的拥塞控制方法 ----AIMD
- Linux——eth0,eth1,eth2,lo及ifconfig命令
- Rust编程语言入门教程(二)-核心概念(所有权(Ownership) 和生命周期)、变量声明(遍历数组)
- ora-01045 :user system lacks create session privilege; logon denied
- WeAPI android ios,WechatOpenSDK 1.8.6 iOS接入指南
- C# 创建桌面快捷方式
- 软件人员kpi制定模板_软件部门绩效考核表