大家好,欢迎来到IT知识分享网。
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#Spaceo#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
¥ 我要打赏 纠错/补充 收藏
免责声明:本站所有文章内容,图片,视频等均是来源于用户投稿和互联网及文摘转载整编而成,不代表本站观点,不承担相关法律责任。其著作权各归其原作者或其出版社所有。如发现本站有涉嫌抄袭侵权/违法违规的内容,侵犯到您的权益,请在线联系站长,一经查实,本站将立刻删除。 本文来自网络,若有侵权,请联系删除,如若转载,请注明出处:https://haidsoft.com/152129.html