Case式なぞを弄ってみる

>sqlite3 PopTbl.dat
SQLite version 3.6.11
Enter ".help" for instructions
Enter SQL statements terminated with a ";"
sqlite> CREATE TABLE PopTbl(pref_name text, population integer);
sqlite> INSERT INTO PopTbl values('徳島', 100);
sqlite> INSERT INTO PopTbl values('香川', 200);
sqlite> INSERT INTO PopTbl values('愛媛', 150);
sqlite> INSERT INTO PopTbl values('高知', 200);
sqlite> INSERT INTO PopTbl values('福岡', 300);
sqlite> INSERT INTO PopTbl values('佐賀', 100);
sqlite> INSERT INTO PopTbl values('長崎', 200);
sqlite> INSERT INTO PopTbl values('東京', 400);
sqlite> INSERT INTO PopTbl values('群馬', 50);
sqlite> select * from PopTbl;
徳島|100
香川|200
愛媛|150
高知|200
福岡|300
佐賀|100
長崎|200
東京|400
群馬|50
sqlite> SELECT CASE pref_name
   ...>                 WHEN '徳島' THEN '四国'
   ...>                 WHEN '香川' THEN '四国'
   ...>                 WHEN '愛媛' THEN '四国'
   ...>                 WHEN '高知' THEN '四国'
   ...>                 WHEN '福岡' THEN '九州'
   ...>                 WHEN '佐賀' THEN '九州'
   ...>                 WHEN '長崎' THEN '九州'
   ...>         ELSE 'その他' END AS district,
   ...>         SUM(population)
   ...> FROM PopTbl
   ...> GROUP BY CASE pref_name
   ...>                 WHEN '徳島' THEN '四国'
   ...>                 WHEN '香川' THEN '四国'
   ...>                 WHEN '愛媛' THEN '四国'
   ...>                 WHEN '高知' THEN '四国'
   ...>                 WHEN '福岡' THEN '九州'
   ...>                 WHEN '佐賀' THEN '九州'
   ...>                 WHEN '長崎' THEN '九州'
   ...>         ELSE 'その他' END;
その他|450
九州|600
四国|650
GCL (GNU Common Lisp)  2.6.7 ANSI    Dec 27 2007 19:55:59
Source License: LGPL(gcl,gmp), GPL(unexec,bfd)
Binary License:  GPL due to GPL'ed components: (UNEXEC)
Modifications of this banner must retain notice of a compatible license
Dedicated to the memory of W. Schelter

Use (help) to get some basic information on how to use GCL.

>(setq pref_name "徳島")

"徳島"

>(cond
 ((equal pref_name "徳島") "四国")
 ((equal pref_name "香川") "四国")
 ((equal pref_name "愛媛") "四国")
 ((equal pref_name "高知") "四国")
 ((equal pref_name "福岡") "九州")
 ((equal pref_name "佐賀") "九州")
 ((equal pref_name "長崎") "九州")
  (t "その他"))

"四国"

>(setq pref_name "福岡")

"福岡"

>(cond
 ((equal pref_name "徳島") "四国")
 ((equal pref_name "香川") "四国")
 ((equal pref_name "愛媛") "四国")
 ((equal pref_name "高知") "四国")
 ((equal pref_name "福岡") "九州")
 ((equal pref_name "佐賀") "九州")
 ((equal pref_name "長崎") "九州")
  (t "その他"))

"九州"

>(setq pref_name "東京")

"東京"

>(cond
 ((equal pref_name "徳島") "四国")
 ((equal pref_name "香川") "四国")
 ((equal pref_name "愛媛") "四国")
 ((equal pref_name "高知") "四国")
 ((equal pref_name "福岡") "九州")
 ((equal pref_name "佐賀") "九州")
 ((equal pref_name "長崎") "九州")
  (t "その他"))

"その他"
getRegion :: String -> String
getRegion str = case str of
               "Tokushima" -> "Shikoku"
               "Kagawa" -> "Shikoku"
               "Ehime" -> "Shikoku"
               "Kouchi" -> "Shikoku"
               "Fukuoka" -> "Kyushu"
               "Saga" -> "Kyushu"
               "Nagasaki" -> "Kyushu"
               otherwise -> "Other"

main = do
  print $ getRegion "Tokushima"
  print $ getRegion "Fukuoka"
  print $ getRegion "Tokyo"