「48時間でSchemeを書こう」の版間の差分

削除された内容 追加された内容
→‎最初の一歩: 表の和訳以外訳出
61 行
 
もちろん、これらアクションはそれ自身関数や他の複雑な式を呼び出し、(<code>return</code>関数を呼ぶかそれを呼ぶ関数を呼び出すことで)その値を受け渡していくことができます。この例では、まず引数リストの最初の要素(インデックス0番目、<code>args !! 0</code>)を取り、文字列<code>"Hello, "</code>の末尾にそれを繋げ(<code>"Hello, " ++</code>)、そして最後にその結果を<code>putStrLn</code>に渡すと、doブロックのパイプに組み込まれる新しいIOアクションが返されます。
 
以上のように作られた新しいアクションは、型<code>IO ()</code>を持つ識別子<code>main</code>にしまわれます。Haskell処理系はこの定義を認識し、その中のアクションを実行します。
 
Haskellに於て文字列は文字のリストなので、リストに対して可能な操作は全て文字列にも適用することができます。標準の演算子とその優先順位の完全な表は以下です。
 
{| border="1"
! 演算子
! 優先順位
! 結合性
! 説明
|-
| .
| 9
| Right
| Function composition
|-
| <nowiki>!!</nowiki>
| 9
| Left
| List indexing
|-
| ^, ^^, **
| 8
| Right
| Exponentiation (integer, fractional, and floating-point)
|-
| <nowiki>*, /</nowiki>
| 7
| Left
| Multiplication, Division
|-
| +, -
| 6
| Left
| Addition, Subtraction
|-
| <nowiki>:</nowiki>
| 5
| Right
| Cons (list construction)
|-
| ++
| 5
| Right
| List Concatenation
|-
| `elem`, `notElem`
| 4
| Left
| List Membership
|-
| <nowiki>==, /=, &lt;, &lt;=, &gt;=,&gt;</nowiki>
| 4
| Left
| Equals, Not-equals, and other relation operators
|-
| &amp;&amp;
| 3
| Right
| Logical And
|-
| <nowiki>||</nowiki>
| 2
| Right
| Logical Or
|-
| &gt;&gt;, &gt;&gt;=
| 1
| Left
| Monadic Bind, Monadic Bind (piping value to next function)
|-
| <nowiki>=&lt;&lt;</nowiki>
| 1
| Right
| Reverse Monadic Bind (same as above, but arguments reversed)
|-
| $
| 0
| Right
| Infix Function Application (same as "f x", <br />but right-associative instead of left)
|}
 
プログラムをコンパイルし実行するには、以下のようなものを試してみてください。
 
<syntaxhighlight lang="bash">
% ghc -o hello_you --make listing2.hs
% ./hello_you Jonathan
Hello, Jonathan
</syntaxhighlight>
 
<code>-o</code>オプションには作りたい実行ファイルの名前を与え、後はただ単にHaskellソースファイルの名前を指定します。
 
<!-- Exercisesテンプレートが使えない! -->
練習問題
# コマンドラインから''2つ''の引数を取り、その両方を使ってメッセージを出力するようにプログラムを変更しなさい。
# 2つの引数に対して簡単な算術演算を行うようにプログラムを変更しなさい。文字列を数値に変換するには[http://www.haskell.org/onlinereport/standard-prelude.html#$vread read]が、数値を文字列に戻すには[http://www.haskell.org/onlinereport/standard-prelude.html#$tShow show]が使えます。いくつか違う演算を行うよう試してみてください。
# <code>getLine</code>はコンソールから一行読み込み、文字列として返すIOアクションです。名前を入力を促し、名前を読み、コマンドライン引数の代わりにそれを出力するようにプログラムを変更しなさい。
 
== Parsing ==