首页 > 其他分享 >无涯教程-LISP - 输入&输出

无涯教程-LISP - 输入&输出

时间:2024-01-14 12:32:40浏览次数:20  
标签:教程 eof stream LISP 无涯 char read output optional

常见的LISP提供许多输入输出函数,我们已经使用了格式化函数和打印函数进行输出,在本节中,我们将研究LISP中提供的一些最常用的输入输出函数。

Read函数

下表提供了LISP最常用的输入函数-

Sr.No. Function & 描述
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

如果输入流中立即有一个字符,则断言 listen 为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

清除与 input-stream相关的所有缓冲输入。

10

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

它连续获取字符串的字符,并构建一个LISP对象 并返回该对象 。

11

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

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

12

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

它从二进制输入流中读取一个字节,并以整数形式返回。

键盘读取输入

read 函数用于从键盘获取输入,如,考虑代码片段-

(write ( + 15.0 (read)))

假设用户从STDIN输入中输入10.2,它将返回,

25.2

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

读取输入 - 示例1

创建一个名为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

读取输入 - 示例2

创建一个名为main.lisp的新源代码文件,然后在其中键入以下代码。

(with-input-from-string (stream "Welcome to Learnfk Point!")
   (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 
#\t 
#\o 
#\Space 

Output函数

LISP中的所有输出函数都使用一个名为 output-stream 的可选参数,输出发送到该参数。如果为nil ,则输出流默认为变量* standard-output *的值。

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

Sr.No. Function and 描述
1

write object & 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指定的输出流,默认为* standard-output *的值。其他值默认为为打印设置的相应全局变量。

2

prin1 object & optional output-stream

print object & optional output-stream

pprint object & optional output-stream

princ object & optional output-stream

所有这些函数将对象的打印表示输出到 output-stream 。但是,存在以下差异-

  • prin1返回对象作为其值。

  • print使用前一个换行符和后跟空格打印对象 。它返回对象 。

  • pprint与print相似,只是省略了尾随空格。

  • princ类似于prin1,除了输出没有转义符

3

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

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

prin1-to-string Object

从字符串到字符串对象

有效地打印对象 ,并将输出字符制成字符串,然后将其返回。

4

write-char character & optional output-stream

它将字符输出到 output-stream ,并返回字符。

5

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

它将 string 的指定子字符串的字符写入 output-stream。

6

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

它的工作方式与写字符串相同,但之后输出换行符。

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 尝试确保所有发送到output-stream的输出都已到达其目的地,然后才返回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

下表简要介绍了常用指令-

Sr.No. Directive & 描述
1

~A

后跟ASCII参数。

2

~S

其次是S表达式。

3

~D

对于十进制参数。

4

~B

对于二进制参数。

5

~O

对于八进制参数。

6

~X

对于十六进制参数。

7

~C

对于字符参数。

8

~F

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

9

~E

指数浮点参数。

10

~$

美元和浮点参数。

11

~%

将打印新行。

12

~*

下一个参数将被忽略。

13

~?

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

格式化输出 - 示例

让我们重写计算圆面积的程序,创建一个名为main.lisp的新源代码文件,然后在其中键入以下代码。

(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

参考链接

https://www.learnfk.com/lisp/lisp-input-output.html

标签:教程,eof,stream,LISP,无涯,char,read,output,optional
From: https://blog.51cto.com/u_14033984/9240347

相关文章

  • Python教程(24)——全方位解析Python中的装饰器
    Python装饰器是一种特殊的函数,它接收一个函数作为参数,然后返回一个新的函数,用于扩展或修改原始函数的行为。装饰器提供了一种便捷的方式来在不修改被装饰函数源代码的情况下,增加、修改或包装函数的功能。通俗点说就是尽量不修改原有功能代码的情况下,给原有的功能添加新的功能。装......
  • 无涯教程-LISP - 集合(Set)
    adjoin函数首先在给定列表中查找该元素(如果找到),然后返回原始列表,否则,它将创建一个新的cons单元格,其car作为元素,而cdr指向原始列表,并返回此新列表。adjoin函数还使用:key和:test关键字参数。adjoin函数不会修改原始列表,因此要更改列表本身,您必须将adjoin返回的值分......
  • Asp.Net怎么上传图片-基础教程
    aspx页面script方法内用于判断用户上传的文件是否为自己要求的格式和展示图片的方法body内定义一个图片框用于预览用户上传的图片一个上传文件的控件一个提交按钮代码如下Script代码:$(function(){$('#uploadImage').on('change',function(){var......
  • 无涯教程-LISP - 数字(Numbers)
    CommonLisp number数据类型包括LISP支持的各种数字。LISP支持的数字类型是-IntegerRatiosFloatComplex下图显示了LISP中可用的数字层次结构和各种数字数据类型-数字类型下表描述了LISP中可用的各种数字类型数据-Sr.No.Datatype&描述1fixnum此数据类型表示......
  • Python手相识别教程6线的通用原则
    6线的通用原则线条不是无缘无故写在手上的,它们来自上天的影响和人类自身的个性。--亚里士多德手部的主要纹路被称为手掌皱纹,在子宫中的第三个月就已完全形成。在胚胎发育成胎儿的关键时刻,有关个人生命的大量信息已经铭刻在手掌上。大脑和手是由相同的干细胞构成的,它们之间的关......
  • 无涯教程-LISP - 函数声明
    函数是一起执行任务的一组语句。定义函数名为defun的宏用于定义函数,defun宏需要三个参数-函数名称函数参数函数主体defun的语法是-(defunname(parameter-list)"Optionaldocumentationstring."body)让我们用简单的示例来说明这个概念。函数-示例1让我们编写......
  • 高项改革???? 这里有最新的官方教程。 高级项目管理师
    大大咧咧,又有点后知后觉。决定软考后发现改机考了。并且是去年下半年改成机考,也就是说已经机考过一次。还好,还好,还好后知后觉的自己居然“发现”这一点。真是把自己蠢到了。。。。机考的范围应该就变大了吧,难度会不会降低呢?如果从背诵的角度看,范围变大就是难度变大。何来难度降......
  • 无涯教程-LISP - 循环语句
    在某些情况下,您需要执行一段代码次数,循环语句使我们可以多次执行一个语句或一组语句,以下是大多数编程语言中循环语句的一般形式。LISP提供以下类型的构造来处理循环需求。单击以下链接以查看其详细信息。Sr.No.Construct&描述1loop以最简单的形式,它允许您重复执行某些语......
  • 无涯教程-LISP - 条件判断
    以下是大多数编程语言中常见的典型决策结构的一般形式-LISP提供以下类型的决策构造,单击以下链接以查看其详细信息。Sr.No.Construct&描述1cond此构造用于检查多个判断操作子句。2ifif构造具有多种形式。3when如果test子句的判断输出为true,则执行test操作,否则,对后......
  • 无涯教程-LISP - 运算符
    运算符是一个符号,告诉编译器执行特定的数学或逻辑操作。LISP允许对数据进行大量操作,并由各种函数,宏和其他构造支持。允许对数据进行的操作可以归类为-算术运算比较操作逻辑运算按位运行算术运算下表显示了LISP支持的所有算术运算符。假设变量A=10,变量B=20,然后-运算符......