プログラミング言語I

副作用

副作用とは

Scheme 式を評価して値を返す

式を評価

評価のお約束

評価すると
値が返る

が重要

(+ 1 2)
			      

足した
結果の
が欲しい

でも

が重要でない
手続きもある

いままでで でてきたのは

define

(define one 1)

評価すると値は

one

でも

oneが 欲しいのではない

(define one 1)

を評価すると

副作用として

シンボル

oneに

1がバインドされる

ちょっと寄り道

新しいデータ型

文字列

string

"文字列" は文字列
"文字列" はstring
"" で囲めば文字列
"123456789" 文字列

"12  6789"
			    

空白があってもよい

""
で囲めば文字列
			    

文字列は schemeの 式

文字列の 評価

"文字列"

を評価すると

"文字列"

"123456789"

を評価すると

"123456789"

"12 6789"
を評価すると

"12 6789"

つまり
文字列を 評価すると
その 文字列自身が 値
OK?
これって 何と 同じ?
そう
数 と 同じ
まだある
そう
( ), #t, #f などと同じ
数も空リストも
評価すると それ自身が値
専門用語では
自己評価型 のデータと呼ぶ
"" で囲めば 文字列
では
文字列の中に ダブルクォート" を含むのは
"123"456" だと
"123" までが文字列に なっちゃう
こうゆうときは
エスケープ文字 を使う
エスケープ文字 \
\ バックスラッシュ
をつかう

注意

日本語が使える環境では

\ (バックスラッシュ)は

¥ (円記号)

を使うことになっている かもしれない

エスケープ文字は 直後の文字の

直後の文字の 特別な意味を 打ち消す
これはschemeに 限らないで 使われるテクニック
エスケープ文字は 直後の文字の 特別な意味を 打ち消す

覚えておこう

ちょっとまって
\ を文字列を含むには どうするの?
そう考えた あたなは
スルドイ
でも大丈夫
"123\\456"
とすれば良い
よりみち終わり
新しい 副作用のある 手続き
write
display
print
write は
引数の値を 副作用として 出力する
副作用として 出力する
どこに?
出力ポートに
出力ポートって
普通は 皆さんが見ている ディスプレイ上の 端末
gosh を起動している 端末
標準出力 という
write を評価した値

				#<undef>
				
			    

				#<undef>
				
			    
試してみよう
(write 10000)


gosh> (write 2018)
2018#<undef>
			    


(write 10 20)
エラー
			    


(print "副作用")
 副作用
 #<undef>
				  
				  
			    

print は
最後に 改行する

print は 引数が
いくつでも 出力する


(print "副作用" "ある")
副作用ある
#<undef>

write
display
print

違いに注意して 使おう