Lisp-input-output
LISP-入力および出力
Common LISPは、多数の入出力機能を提供します。 すでにformat関数とprint関数を出力に使用しています。 このセクションでは、LISPで提供される最も一般的に使用される入出力関数のいくつかを見ていきます。
入力機能
次の表は、LISPの最も一般的に使用される入力関数を示しています-
Sr.No. | Function & Description |
---|---|
1 |
入力ストリームからLispオブジェクトの印刷された表現を読み込み、対応するLispオブジェクトを構築し、オブジェクトを返します。 |
2 |
これは、拡張トークンを終了した文字を正確に判別することが望ましい特殊な状況で使用されます。 |
3 |
改行で終わるテキスト行を読み取ります。 |
4 |
入力ストリームから1文字を取得し、文字オブジェクトとして返します。 |
5 |
入力ストリームから最後に読み込まれた文字を入力ストリームの前面に配置します。 |
6 |
入力ストリームから実際に削除せずに、入力ストリームから読み取られる次の文字を返します。 |
7 |
input-streamからすぐに使用できる文字がある場合、述語 listen はtrueで、ない場合はfalseです。 |
8 |
read-char-no-hang & optional input-stream eof-error-p eof-value recursive-p これは read-char と似ていますが、文字を取得しない場合、文字を待たずにすぐにnilを返します。 |
9 |
_input-stream._に関連付けられたバッファリングされた入力をクリアします |
10 |
文字列の文字を連続して取得し、LISPオブジェクトを構築してオブジェクトを返します。 また、場合によっては、読み取られていない文字列の最初の文字のインデックス、または文字列の長さ(または長さ+1)も返します。 |
11 |
:startと:endで区切られた文字列の部分文字列を調べます(デフォルトは文字列の先頭と末尾です)。 空白文字をスキップし、整数の解析を試みます。 |
12 |
binary-input-streamから1バイトを読み取り、整数の形式で返します。 |
キーボードからの入力の読み取り
*read* 関数は、キーボードから入力を取得するために使用されます。 引数をとらない場合があります。
たとえば、コードスニペットを考慮してください-
(write ( + 15.0 (read)))
ユーザーがSTDIN入力から10.2を入力すると、それが返され、
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 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
出力関数
LISPのすべての出力関数は、出力が送信される_output-streamと呼ばれるオプションの引数を取ります。 言及されていない場合、または_nil、_ output-streamはデフォルトで変数 standard-output の値になります。
次の表は、LISPの最も一般的に使用される出力関数を示しています-
Sr.No. | Function and Description |
---|---|
1 |
write object & key :stream :escape :radix :base :circle :pretty :level :length :case :gensym :array
どちらも:streamで指定された出力ストリームにオブジェクトを書き込みます。デフォルトは standard-output の値です。 他の値は、印刷用に設定された対応するグローバル変数にデフォルト設定されます。 |
2 |
prin1 object & optional output-stream
これらの関数はすべて、オブジェクトの出力表現を_output-stream_に出力します。 ただし、次の違いがあります-
|
3 |
文字列への書き込み object&キー:エスケープ:基数:ベース:サークル:きれい:レベル:長さ:ケース:gensym:配列:読み取り可能:右マージン:その他の幅:ライン:pprint-dispatch
オブジェクトは効果的に印刷され、出力文字は文字列に変換されて返されます。 |
4 |
文字を_output-stream、_に出力し、文字を返します。 |
5 |
_string_の指定された部分文字列の文字を_output-stream._に書き込みます。 |
6 |
write-stringと同じように機能しますが、その後に改行を出力します。 |
7 |
_output-stream._に改行を出力します |
8 |
ストリームが行の先頭にない場合にのみ、改行を出力します。 |
9 |
|
10 |
write-byte integer binary-output-stream _integer._の値である1バイトを書き込みます |
例
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
どこで、
- 宛先は標準出力です
- control-stringは、出力される文字と印刷ディレクティブを保持します。
- formatディレクティブ*は、チルダ(〜)、コンマで区切られたオプションのプレフィックスパラメーター、オプションのコロン(:)およびアットマーク(@)修飾子、およびこれがどのようなディレクティブであるかを示す単一の文字で構成されます。
プレフィックスパラメータは通常、整数であり、オプションで符号付き10進数として表記されます。
次の表は、一般的に使用されるディレクティブの簡単な説明を提供します-
Sr.No. | Directive & Description |
---|---|
1 |
~A ASCII引数が後に続きます。 |
2 |
~S S式が続きます。 |
3 |
~D 10進引数の場合。 |
4 |
~B バイナリ引数用。 |
5 |
~O 8進引数の場合。 |
6 |
~X 16進引数の場合。 |
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