トップページ⇒tech
7コメント5KB

Haskellの使い方知ってますか?

■ このスレッドは過去ログ倉庫に格納されています
0001名無しさん@お腹いっぱい。 NGNG
HaskellのHugs98で、テーブルにフォーマットするファンクションの
作り方をご存知の方いらっしゃいませんか?

↓こんなのを
main> formatTable [["a"@`"b"@`"c"] ++ ["d"@`"e"@`"f"]]

↓こんな風にしたいんです。
main>
a b c
d e f
0002名無しさん@お腹いっぱい。 NGNG
(++) でくっつけちゃ、行の境目がわからないじゃん。
問題見直して!
0003名無しさん@お腹いっぱい。 NGNG
ごめんなさい。 問題を見直しました所、最初のは全然違いますね・・・。
全部書いちゃうと、問題は、formatTableのファンクションを作れって事なんですけど・・

↓タイプ (すでにもう決まってる。)
formatTable :: [[String]] -> String
   
↓こんな風にインプットしたら 
main> formatTable [["a"@`"b"@`"c"]@`["ad"@`"ae"@`"af"]]
↓こんなアウトプット
main>"a b c \nad ae af"

↓ちなみにputStrを使ってインプットすると
main>putStr (formatTable [["a"@`"b"@`"c"]@`["ad"@`"ae"@`"af"]])
↓こんな風なアウトプット
main>
a b c
ad ae af ←ちゃんと綺麗にそろってる。

Haskellに関しての情報がなかなか集められません。 どなたか助けて下さい。
0004名無しさん@お腹いっぱい。 NGNG
ちゃんと綺麗に、って部分を除いて(読者の練習問題としてとっておこう:)

formatTable :: [[String]] -> String
formatTable [] = ""
formatTable (a:b) = formatRow a ++ "\n" ++ formatTable b
where formatRow [] = ""
formatRow (a:b) = a ++ " " ++ formatRow b

ってのがカンタンな解答のうちのひとつだな。
Haskell は日本語の参考書はたぶんない。(学生思いの先生だなあ!)
http://haskell.org/ だ。
0005名無しさん@お腹いっぱい。 NGNG
>4
丁重な返信ありがとうございます。暗闇の中に一寸の光が見えた感じです。
これからは気合で英語のページを読みまくります。
本当にありがとうございました。
00061です。 名前はタカです。 NGNG
ちゃんと綺麗にって部分を頑張って解いているのですが、なかなかうまくいきません。

まず、length ファンクションで文字数をゲットした後、maximumファンクションで
リストの中の最大文字数をゲット、リスト内の文字数から最大文字数をマイナスして、
足りない文字数をゲット。 その足りない文字数を””に変えて、それをリストに足していく
って感じなんですけど、いくつか問題が・・・・。

文字数を””に変えるファンクションなんですけど、こんな感じまでは頭から出てきたんですけど・・。
(もちろんまったく動きません・・。)
convert x |x >0 = (++" ") (x-1)

この(x-1)はどこに置けばいいのですか? あと(x = 0)になったら終わりってのを何所に付け加えるのですか?

もう一つ質問。リスト内のすべての数から1を引く場合のファンクションの作り方はどのようにすればいいのですか?
たとえば、[[1@`2@`3]@`[4@`5@`6]] から1を引いて、アウトプットは[[0@`1@`2]@`[3@`4@`5]]

先生様、もしまだこの板を見ていらしてたら、どうかこの迷える子羊に教えて頂けないでしょうか?
0007名無しさん@お腹いっぱい。 NGNG
もう見てなかったよ…
リストのすべての要素に関数を適用するのは map だ。map の定義は Prelude を
読むこと。リストのリストの各要素に関数を適用するなら
 map (map (\a -> a-1)) [[1@`2@`3]@`[4@`5@`6]]
のように。
文字列を n 文字にそろえるなら
 fillSp :: Int -> String -> String
 fillSp 0 _    = ""
 fillSp n ""    = ' ':fillSp (n-1) ""
 fillSp n (s:ss) = s:fillSp (n-1) ss
では。
■ このスレッドは過去ログ倉庫に格納されています