lisp编译环境 linux,Lisp

输入与输出

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

输入函数

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

SL No.

函数

说明

1

read &optional input-stream eof-error-p eof-value recursive-p

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

2

read-preserving-whitespace &optional in-stream eof-error-p eof-value recursive-p

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

3

read-line &optional input-stream eof-error-p eof-value recursive-p

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

4

read-char &optional input-stream eof-error-p eof-value recursive-p

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

5

unread-char character &optional input-stream

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

6

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

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

7

listen &optional input-stream

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

8

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

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

9

clear-input &optional input-stream

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

10

read-from-string string &optional eof-error-p eof-value &key :start :end :preserve-whitespace

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

11

parse-integer string &key :start :end :radix :junk-allowed

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

12

read-byte binary-input-stream &optional eof-error-p eof-value

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

读取键盘的输入

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

例如,考虑代码片段:

(write ( + 15.0 (read)))

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

25.2

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

示例

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

; the function AreaOfCircle

; calculates area of a circle

; when the radius is input from keyboard

(defun AreaOfCircle()

(terpri)

(princ "Enter Radius: ")

(setq radius (read))

(setq area (* 3.1416 radius radius))

(princ "Area: ")

(write area))

(AreaOfCircle)

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

Enter Radius: 5 (STDIN Input)

Area: 78.53999

示例

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

(with-input-from-string (stream "Welcome to Tutorials Yiibai!")

(print (read-char stream))

(print (read-char stream))

(print (read-char stream))

(print (read-char stream))

(print (read-char stream))

(print (read-char stream))

(print (read-char stream))

(print (read-char stream))

(print (read-char stream))

(print (read-char stream))

(print (peek-char nil stream nil '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

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

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

2

prin1object &optional output-stream

print object &optional output-stream

pprint object &optional output-stream

princ object &optional output-stream

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

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

pprint 就像印刷不同之处在于省略了结尾间隔。 princ 就像prin1除了输出没有转义字符。

3

write-to-string object &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-string object

princ-to-string object

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

4

write-char character &optional output-stream

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

5

write-string string &optional output-stream &key :start :end

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

6

write-line string &optional output-stream &key :start :end

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

7

terpri &optional output-stream

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

8

fresh-line &optional output-stream

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

9

finish-output &optional output-stream

force-output &optional output-stream

clear-output &optional output-stream

函数finish-output尝试确保发送到输出流的所有输出已达到其目标,然后才返回nil。 函数force-output发起的任何内部缓冲区清空,但返回nil,而无需等待完成或确认。

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

10

write-byte integer binary-output-stream

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

示例

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

; this program inputs a numbers and doubles it

(defun DoubleNumber()

(terpri)

(princ "Enter Number : ")

(setq n1 (read))

(setq doubled (* 2.0 n1))

(princ "The Number: ")

(write n1)

(terpri)

(princ "The Number Doubled: ")

(write doubled)

)

(DoubleNumber)

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

Enter Number : 3456.78 (STDIN Input)

The Number: 3456.78

The Number Doubled: 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一个新的源代码文件,并在其中输入如下代码:

(adsbygoogle = window.adsbygoogle || \[\]).push({});

(adsbygoogle = window.adsbygoogle || \[\]).push({});

(defun AreaOfCircle()

(terpri)

(princ "Enter Radius: ")

(setq radius (read))

(setq area (\* 3.1416 radius radius))

(format t "Radius: = ~F~% Area = ~F" radius area) )

(AreaOfCircle)

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

Enter Radius: 10.234 (STDIN Input)

Radius: \= 10.234

Area \= 329.03473

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值