lisp princ详解_LISP – 输入和输出

lisp princ详解_LISP – 输入和输出CommonLisp 提供了大量的输入输出功能

大家好,欢迎来到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

(0)
上一篇 2025-03-10 12:20
下一篇 2025-03-10 12:25

相关推荐

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注微信