回答編集履歴

5

本日の日付が間違っていたので直しました。

2016/02/06 02:03

投稿

tatsuya6502
tatsuya6502

スコア2046

test CHANGED
@@ -104,7 +104,7 @@
104
104
 
105
105
 
106
106
 
107
- ウェブでの日本語記事ですと、こちらを見つけました。この中の「Haskellでテトリス(Part 1〜9)」が丁寧に解説されていておすすめです。なお、GUI ツールキットは GTK を使っています。
107
+ ウェブでの日本語記事ですと、こちらを見つけました。この中の「Haskellでテトリス(Part 1〜9)」が丁寧に解説されていておすすめです。なお、GUI ツールキットは GTK+ を使っています。
108
108
 
109
109
 
110
110
 
@@ -144,7 +144,7 @@
144
144
 
145
145
 
146
146
 
147
- (2016年2月26日追記)
147
+ (2016年2月6日追記)
148
148
 
149
149
  「Scala逆引きレシピ」(竹添直樹、島本多可子 著、翔泳社)に、数ページですが「GUIアプリケーションを作りたい」という項目があります。そこにはこのように書かれています。「もちろんScalaから直接Swingを使用することも可能ですが、scala.swingパッケージを使えば関数型言語らしい宣言的なスタイルで、SwingによるGUIアプリケーションを記述できます」
150
150
 

4

Scala逆引きレシピ(書籍)の情報を追加しました

2016/02/06 02:03

投稿

tatsuya6502
tatsuya6502

スコア2046

test CHANGED
@@ -140,7 +140,15 @@
140
140
 
141
141
 
142
142
 
143
- 最近では、OCaml や Haskell の他に、ML から大きな影響を受けている言語が増えてきました。[Scala](http://scala-lang.org/) もそのひとつで、日本語の情報も多いです。Scala なら Clojure と同様に、Java Swing を使ったデスクトップアプリが作れます。(書籍は過去数冊持ってましたが、みな処分してしまいました)
143
+ 最近では、OCaml や Haskell の他に、ML から大きな影響を受けている言語が増えてきました。[Scala](http://scala-lang.org/) もそのひとつで、日本語の情報も多いです。Scala なら Clojure と同様に、Java Swing を使ったデスクトップアプリが作れます。
144
+
145
+
146
+
147
+ (2016年2月26日追記)
148
+
149
+ 「Scala逆引きレシピ」(竹添直樹、島本多可子 著、翔泳社)に、数ページですが「GUIアプリケーションを作りたい」という項目があります。そこにはこのように書かれています。「もちろんScalaから直接Swingを使用することも可能ですが、scala.swingパッケージを使えば関数型言語らしい宣言的なスタイルで、SwingによるGUIアプリケーションを記述できます」
150
+
151
+ (追記終わり)
144
152
 
145
153
 
146
154
 

3

Swiftの項に文言を追加しました

2016/02/06 01:07

投稿

tatsuya6502
tatsuya6502

スコア2046

test CHANGED
@@ -152,7 +152,7 @@
152
152
 
153
153
 
154
154
 
155
- 日本の Haskell で Swift を使っている人は多いようで、ネット上では、Haskell の○○を Swift で再現してみる系の記事が多かったりします。
155
+ 日本の Haskell ユーザーで Swift を使っている人は多いようで、ネット上では、Haskell の○○を Swift で再現してみる系の記事が多かったりします。
156
156
 
157
157
 
158
158
 

2

追加の質問に回答しました。

2016/01/30 09:58

投稿

tatsuya6502
tatsuya6502

スコア2046

test CHANGED
@@ -67,3 +67,133 @@
67
67
 
68
68
 
69
69
  作りたいアプリと使いたい言語が決まったら、それに必要なライブラリやフレームワークがあるか調べてみてください。そして、それを試してみてください。試した上で、うまく行かないことがあれば、また質問すればいいのです。その時は、もっと具体的な質問になっているでしょう。
70
+
71
+
72
+
73
+ ---
74
+
75
+ (2016年1月30日 追加)
76
+
77
+
78
+
79
+ 関数型言語に興味があって、それを使って、デスクトップアプリを作りたいのですね。
80
+
81
+
82
+
83
+ 最初に言っておくと、私が仕事で主に使っているのは Erlang/OTP で、分散データベースの開発をしています。そのため、デスクトップアプリの開発についてはほとんどわかりません。Haskell や OCaml のような ML 系言語については、以前から趣味として学習しているというレベルです。Lisp も時々遊びで触る程度。最近は ML 系の Rust という言語を、Erlang と組み合わせて使おうとしています。(サーバー側での用途です)
84
+
85
+
86
+
87
+ なので、的確な回答ができるかはなんともいえないのですが、わかる範囲で書いてみます。
88
+
89
+
90
+
91
+ **Haskel**
92
+
93
+
94
+
95
+ たしかに、Haskell でデスクトップアプリを作っている人は、かなりの少数派のようです。ネットで検索してもあまり出てきませんね。手元には洋書中心で Haskell の書籍が5冊あります。が、その中で GUI について解説しているのは「Real World Haskell」ただ1冊で、しかも14ページしかありません。(英語版でのページ数です)
96
+
97
+
98
+
99
+ Real World Haskell の日本語翻訳版はオライリージャパンから出版されています。また、英語版ならオンラインで無料で読めます。
100
+
101
+
102
+
103
+ - Real World Haskell - [Chapter 23. GUI Programming with gtk2hs](http://book.realworldhaskell.org/read/gui-programming-with-gtk-hs.html)
104
+
105
+
106
+
107
+ ウェブでの日本語記事ですと、こちらを見つけました。この中の「Haskellでテトリス(Part 1〜9)」が丁寧に解説されていておすすめです。なお、GUI ツールキットは GTK を使っています。
108
+
109
+
110
+
111
+ - [muratamuu.github.io カテゴリー:Haskell](http://muratamuu.github.io/blog/categories/haskell/)
112
+
113
+
114
+
115
+ **Lisp**
116
+
117
+
118
+
119
+ Lisp に関しては、Common Lisp(CL)、Scheme(+Gauche)、Clojure といった方言がたくさんあり、さらに各方言について、処理系がいくつかある(CL なら SBCL、Clozure CL、CLisp など)という状況なので、非常に探しにくいです。
120
+
121
+
122
+
123
+ まあ、最近の日本語での情報(書籍やネット上の記事)の多さを取るなら、Java VM 上で動く [Clojure](http://clojure.org) がよいかと思います。Clojure なら、Java の GUI ツールキットである Swing を使ってデスクトップアプリも作れます。私は Clojure の書籍は持っていないので、ご自身で情報を探してみてください。
124
+
125
+
126
+
127
+ **その他:OCaml**
128
+
129
+
130
+
131
+ Haskell や Lisp 以外の関数型言語や、関数型言語の影響を強く受けた言語も紹介しましょう。
132
+
133
+
134
+
135
+ まず、[OCaml](https://ocaml.org/) ですが、「プログラミング in OCaml」(五十嵐 淳 著、技術評論社)では、2章割いて GUI アプリ開発を解説しています(GUI ツールキットは Tk)。この本は、冊子版は絶版のようですが、[電子書籍版が買えます](http://www.fos.kuis.kyoto-u.ac.jp/~igarashi/OCaml/)。大学の講義を元に書かれたようで、関数型プログラミングの入門から GUI 構築までが丁寧に解説されていて、おすすめです。
136
+
137
+
138
+
139
+ **その他:Scala**
140
+
141
+
142
+
143
+ 最近では、OCaml や Haskell の他に、ML から大きな影響を受けている言語が増えてきました。[Scala](http://scala-lang.org/) もそのひとつで、日本語の情報も多いです。Scala なら Clojure と同様に、Java Swing を使ったデスクトップアプリが作れます。(書籍は過去数冊持ってましたが、みな処分してしまいました)
144
+
145
+
146
+
147
+ **その他:Swift**
148
+
149
+
150
+
151
+ Apple が開発し、オープソース化した Swift も、ML から多大な影響を受けています。iOS と(Mac)OS X 限定ですが、デスクトップアプリや iPhone のゲームを作るために生まれた言語です。iOS アプリの開発者は多いので、日本語の情報も多いです。
152
+
153
+
154
+
155
+ 日本の Haskell で Swift を使っている人は多いようで、ネット上では、Haskell の○○を Swift で再現してみる系の記事が多かったりします。
156
+
157
+
158
+
159
+ 例:(デスクトップアプリの話ではありませんが)
160
+
161
+ [Swiftでアプリカティブスタイル](http://qiita.com/koher/items/95583f58a443f6a33c28)
162
+
163
+
164
+
165
+ **その他:Rust**
166
+
167
+
168
+
169
+ [Rust](https://www.rust-lang.org/) も ML から多大な影響を受けています。Rust は、Mozilla が次期ウェブブラウザーの研究開発プロジェクトのために開発した言語で、マルチプラットフォーム(Windows、OS X、Linux)のデスクトップアプリやゲームなどを作るのに向いています。システムプログラミング向けの言語なので、OS を書くこともできます。ユーザーフォーラム(英語)の常連回答者たちを見ていると、Haskell ユーザーが多いように見えますね。
170
+
171
+
172
+
173
+ Rust は私のイチオシ言語なのですが、ライブラリの成熟度がまだ低いことと、日本語の情報が少ないことがあり、デスクトップアプリの開発に使うには、まだ早いかもしれません。Piston という、マルチプラットフォームのゲームエンジンの開発が活発に行われていて、[Piston のホームページ](http://www.piston.rs/)では、簡単なパズルゲームや、Minecraft クローンなどのデモアプリが用意されています。また、もちろん、[開発途中のウェブブラウザー](https://servo.org/) もあります。
174
+
175
+
176
+
177
+ **まとめ**
178
+
179
+
180
+
181
+ いま紹介した中からですと、以下の順番で試すのがいいでしょうか?
182
+
183
+
184
+
185
+ 0. Haskellでテトリス
186
+
187
+ 0. プログラミング in OCaml
188
+
189
+ 0. Clojure + Swing(情報はウェブや書籍で探してみる)
190
+
191
+
192
+
193
+ このどれかの言語で、やりたいことができるようなら、とてもいいですね。
194
+
195
+
196
+
197
+ もし不十分だったら、さらに他の言語、Scala や (Mac)OS X なら Swift なども試してみてはどうでしょうか?
198
+
199
+

1

わかりやすさのために、数パラグラフ追加しました

2016/01/30 09:54

投稿

tatsuya6502
tatsuya6502

スコア2046

test CHANGED
@@ -30,7 +30,7 @@
30
30
 
31
31
 
32
32
 
33
- まず、どのプログラミング言語でも、入出力を行うための組み込みのしくみが付いています。例えば、Haskell で putStrLn とすれば、画面に文字列を表示できますし、hPutStr とすればファイルに文字列を格納できます。これらは、言語の「処理系」が、OS とやりとりをすることで実現しているわけです。
33
+ まず、どのプログラミング言語でも、入出力を行うための組み込みのしくみが付いています。例えば、Haskell で `putStrLn` とすれば、画面に文字列を表示できますし、`hPutStr` とすればファイルに文字列を格納できます。これらは、言語(例:Haskell)の「処理系(例:GHC)」が、OS とやりとりをすることで実現しているわけです。
34
34
 
35
35
 
36
36
 
@@ -42,7 +42,7 @@
42
42
 
43
43
 
44
44
 
45
- Yesod のようなフレームワークは、別の人たちが書いた、たくさんのライブラリを活用して構築されています。
45
+ こういうライブラリの中には、HTTP プロトコルを扱うものだったり、SSL のような暗号化を扱うものだったり、データベースとのやり取りを扱うものだったり、いろいろなものがあります。Yesod のようなフレームワークは、処理系自体の機能に加え、こうした、別の人たちが書いた、たくさんのライブラリを活用して構築されています。
46
46
 
47
47
 
48
48
 
@@ -50,20 +50,20 @@
50
50
 
51
51
 
52
52
 
53
- Haskell でも、すでにだれかが、これらのライブラリを Haskell から使うためのライブラリを用意しているはずです。ですから、そのなかから良さそうなものをいくつか選んで、実際に試してみて、「よし、これで行けそう」というものが見つかったら、それを使って開発すればいいのです。
53
+ Haskell でも、すでにだれかが、これらのライブラリを Haskell から使うためのライブラリを用意しているはずです。ですから、そのなかから良さそうなものをいくつか選んで、実際に試してみて、「よし、これで行けそう」というものが見つかったら、それを使って開発すればいいのです。
54
54
 
55
55
 
56
56
 
57
- なお、フレームワークもライブラリの一種なの、上に書いたことと同じ仕組みで動いています。一般的に、ライブラリと呼ぶ時は、自分が書いたプログラムが主体になって、ライブラリにある部品(関数など)を呼び出す形で使います。
57
+ なお、フレームワークもライブラリの一種です。一般的に、ライブラリと呼ぶ時は、自分が書いたプログラムが主体になって、ライブラリにある部品(関数など)を呼び出す形で使います。
58
58
 
59
59
 
60
60
 
61
- フレームワークと呼ぶ時は、フレームワーク側のプログラムが主体になって、自分の書いたプログラムはフレームワークから呼んでもらいます。Haskell でプログラムを書くとき、`main` という名の `IO()` 型の変数を用意して、そこに IO アクションを束縛しますよね。でも、Yesod のようなフレームワークを使う時は、自分のプログラムでは、どこにも `main` などという変数は書きません。なのに動くわけです。
61
+ フレームワークと呼ぶ時は、フレームワーク側のプログラムが主体になって、自分の書いたプログラムはフレームワークから呼んでもらいます。Haskell でプログラムを書くとき、`main` という名の `IO()` 型の変数を用意して、そこに IO アクションを返す関数を束縛しますよね。でも、Yesod のようなフレームワークを使う時は、自分のプログラムでは、どこにも `main` などという変数は書きません。なのに動くわけです。
62
62
 
63
63
 
64
64
 
65
- 実は、Yesod のフレームワークのなかのどこかに `main` があって、そちらが最初に呼ばれるしくみになっているのです。このようなしくみなので、プロジェクトの雛形を作っただけで、ウェブサーバーを起動してデフォルトの画面を表示できるわけです。
65
+ 実は、Yesod のフレームワークのなかのどこかに `main` があって、そちらが最初に評価されるしくみになっているのです。このようなしくみなので、プロジェクトの雛形を作っただけで、ウェブサーバーを起動してデフォルトの画面を表示できるわけです。
66
66
 
67
67
 
68
68
 
69
- 作りたいアプリと使いたい言語が決まったら、それに必要なライブラリやフレームワークがあるか調べてみてください。そして、それを試してみてください。試上で、うまく行かないことがあれば、また質問すればいいのです。その時は、もっと具体的な質問になっているでしょう。
69
+ 作りたいアプリと使いたい言語が決まったら、それに必要なライブラリやフレームワークがあるか調べてみてください。そして、それを試してみてください。試した上で、うまく行かないことがあれば、また質問すればいいのです。その時は、もっと具体的な質問になっているでしょう。