changeset 7:eea79db7cd9e

add record
author Daichi TOMA <toma@cr.ie.u-ryukyu.ac.jp>
date Sat, 06 Jul 2013 11:53:05 +0900
parents e9af42a3707b
children 3ee3f33bc368
files haskell.html prog/record.hs
diffstat 2 files changed, 74 insertions(+), 6 deletions(-) [+]
line wrap: on
line diff
--- a/haskell.html	Sat Jul 06 11:07:49 2013 +0900
+++ b/haskell.html	Sat Jul 06 11:53:05 2013 +0900
@@ -63,8 +63,8 @@
 				</h3>
         <p>
           <ul>
-            <li>RubyやPythonなどのインタプリタ言語と比較して高速である
-            <li>高水準言語で、CやC++、Javaよりも自分の足を撃ち抜きにくい
+            <li>RubyやPythonなどのインタプリタ言語と比較して高速です
+            <li>高水準言語で、CやC++、Javaよりも自分の足を撃ち抜きにくいです
           </ul>
         </p>
 			</article>
@@ -102,7 +102,7 @@
           Haskell は副作用を持ちません。
         </p>
         <p>
-          変数を書き換えることはできません。
+          つまり、変数を書き換えることはできないということです。
         </p>
         <p>
           関数は同じ引数で呼ばれた場合、同じ値を返すことを保証します。
@@ -264,6 +264,9 @@
 				<h3>
           簡単なプログラム
 				</h3>
+        <p>
+          <a href="https://gist.github.com/amothic/5938383">hello.hs</a>
+        </p>
 <pre>
 {-# LANGUAGE OverloadedStrings #-}
 import Network.Wai
@@ -303,7 +306,7 @@
 ghci&gt; :module +Network.Wai.Handler.Warp
 </pre>
         <p>
-          型を教えて貰うには、:t コマンドに続けて正しい式を入力します。
+          型を教えて貰うには、:t コマンドに続けて式を入力します。
         </p>
 <pre>
 ghci&gt; :t run
@@ -442,8 +445,11 @@
 
 			<article class="smaller">
         <h3>
-          Hello.hs
+          Hello Worldと出力するプログラム
         </h3>
+        <p>
+          <a href="https://gist.github.com/amothic/5938383">hello.hs</a>
+        </p>
 <pre>
 {-# LANGUAGE OverloadedStrings #-}
 import Network.Wai
@@ -534,7 +540,7 @@
 
 			<article class="smaller">
         <h3>
-          作成するプログラム全容
+          アクセスしてきたURLで、出力結果を変えるプログラム
         </h3>
         <p>
           <a href="https://gist.github.com/amothic/5933808">routes.hs</a>
@@ -590,6 +596,39 @@
         </p>
 			</article>
 
+			<article class="smaller">
+        <h3>
+          レコード構文
+        </h3>
+<pre>
+-- レコード構文を使わない場合
+data Person = Person String String Int Float String String
+    deriving (Show)
+
+firstName :: Person -&gt; String
+firstName (Person firstname _ _ _ _ _) = firstname
+lastName :: Person -&gt; String
+lastName (Person _ lastname _ _ _ _) = lastname
+age :: Person -&gt; Int
+age (Person _ _ age _ _ _) = age
+height :: Person -&gt; Float
+height (Person _ _ _ height _ _) = height
+phoneNumber :: Person -&gt; String
+phoneNumber (Person _ _ _ _ number _) = number
+flavor :: Person -&gt; String
+flavor (Person _ _ _ _ _ flavor) = flavor
+
+-- レコード構文
+data Person = Person { firstName :: String
+                     , lastName :: String
+                     , age::Int
+                     , height :: Float
+                     , phoneNumber :: String
+                     , flavor :: String } deriving (Show)
+</pre>
+        </p>
+			</article>
+
 			<article>
         <h3>
           pathによって返す関数を変えてみよう
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/prog/record.hs	Sat Jul 06 11:53:05 2013 +0900
@@ -0,0 +1,29 @@
+-- レコード構文を使わない場合
+data Person = Person String String Int Float String String
+    deriving (Show)
+
+firstName :: Person -> String
+firstName (Person firstname _ _ _ _ _) = firstname
+
+lastName :: Person -> String
+lastName (Person _ lastname _ _ _ _) = lastname
+
+age :: Person -> Int
+age (Person _ _ age _ _ _) = age
+
+height :: Person -> Float
+height (Person _ _ _ height _ _) = height
+
+phoneNumber :: Person -> String
+phoneNumber (Person _ _ _ _ number _) = number
+
+flavor :: Person -> String
+flavor (Person _ _ _ _ _ flavor) = flavor
+
+-- レコード構文
+data Person = Person { firstName :: String
+                     , lastName :: String
+                     , age::Int
+                     , height :: Float
+                     , phoneNumber :: String
+                     , flavor :: String } deriving (Show)