- myuon_myon
- 3017
- 0
- 3
- 0
@WhitehackerZ1 すごい!正解です。http://t.co/LGy59TJi の3行目以降をbind.hsにコピーし、新たにコマンドプロンプトを開いてrunhaskell bind.hsと入力して、適当な数値を入れてみてください(cdも忘れずに)
2012-10-19 20:46:05実はghciとしなくても、直接Haskellファイル(拡張子は.hs)を実行することもできます
コマンドはrunhaskellです
runhaskell [ファイル名] :現在のディレクトリにある拡張子がhsのHaskellプログラムファイルを実行する
前回の宿題の答え
1:p x = x * x * x
2:
3:main = do
4: n <- readLn
5: print $ p n
正解できたでしょうか?
上手く行ったかどうかを確認するためには、この内容を適当なファイルで保存し、上にあるようにrunhaskellで実行して下さい。
@WhitehackerZ1 プログラムのほうは正しいです。一旦コマンドプロプロンプト上でCtrl+Dを押し、もう一度runhaskell bind.hsと入力してみてください
2012-10-19 20:55:40@WhitehackerZ1 Ctrl+Dを入力してghciを終了し、コマンドプロンプトがC:\Users\…Documents>になっていることを確認してからrunhaskell bind.hsと入力してください。そして、数値を入力すれば答えが出るはずです
2012-10-19 21:02:49@fumieval できました!!!!が、1回目だけで2回できませんでした・・・ http://t.co/0GoUvntj
2012-10-19 21:07:18@WhitehackerZ1 そういう時はもう一度runhaskell bind.hsと入力すれば大丈夫です。無限に入力を受け取りたいときはどうすればよいかは後でわかります
2012-10-19 21:11:18@WhitehackerZ1 リストについて触れます。リストは、[0,1,2,3,2,1]などの値の列を表し、これがあれば表現できる幅がぐっと広がります。ghciに[]、[1,2,3]、[1..10]、[2,4..40]と入力すれば、それが表現するリストが表示されます
2012-10-19 22:19:23@fumieval @WhitehackerZ1 これでよろしいでしょうか? http://t.co/oRSHvM20
2012-10-19 22:23:18@WhitehackerZ1 ここで、前回のbind.hsを使います。:load bind.hsした後に、map p [1,2,3]と入力すると、[1,2,3]のそれぞれの要素にpを適用したものが表示されるはずです
2012-10-19 22:29:45Haskellにおけるリスト
リストは複数の値を連続して扱うときに使います
記法は、[a,b,c]などとかき、この順番でa,b,cが追加されます
また、[1..10]などのように、ピリオドを2つ書くことで、間を補完してくれます
([1..10] == [1,2,3,4,5,6,7,8,9,10])
また、
p x = x * x * x
であるとき、
map p [1,2,3]
とすれば、後ろのリストの全要素に対してpを適用したものが返ってきます
(map p [1,2,3] == [p 1,p 2,p 3] == [1,8,27])
@fumieval @WhitehackerZ1 キター!!!!!できました!!!これで大丈夫ですとね???自身あります! http://t.co/paY6UCcW
2012-10-19 22:33:02@WhitehackerZ1 はい、その通りです!Haskellでは、複数の値を連続して処理するのにリストを主に使います。では、map関数がどのような仕組みになっているのか、自分で作ることで理解することを目標にします。まず、マイ ドキュメントにlist.hsを作ってください。
2012-10-19 22:36:59@WhitehackerZ1 Haskellでは、リストを処理するための特殊な関数の書き方があります。http://t.co/2qtKWa74 まずはリストの総和を求めてみましょう。このコードを、空のリストには0を、それ以外は先頭の値と残りの和f xsを足すようにしてみてください
2012-10-19 22:46:52f [] = (リストが空っぽの時の値)
f (x:xs) = (任意の値。xは先頭の値、xsはそれ以降のリストが入っており、自由に使える)
右辺をなにかの式にすることで、リストを仮引数として取る函数fが定義できます
ここでは、受け取ったリストの総和を求めることを考えます
(ヒント:[1,2,3,4,5]の総和は、1+2+3+4+5として求めることができます これを素直にプログラムに組み込んでみましょう)