[PR]上記の広告は3ヶ月以上新規記事投稿のないブログに表示されています。新しい記事を書く事で広告が消えます。
もう自分の力では、抽象度が上がらないので、読解してみることにした。http://golf.shinh.org/p.rb?number+slide【模範解答】main=interact(\s->do n<-[1..read s];shows n[f"\n"!!(n-1)])f x=x++f(' ':x)いろいろ分からないので、以下のように interact を抜いたコードにする。----------------------------------------------【解読1】main=print$do n<-[1..10];shows n[f"\n"!!(n-1)]f x=x++f(' ':x)上記は、入力が常に10という前提で、コードを書いた。【実行結果】"1\n2 3\n4 5 6\n7 8 9 10\n"----------------------------------------------shows は、以下を見ると、文字列の結合っぽい。http://www.zvon.org/other/haskell/Outputprelude/shows_f.html----------------------------------------------【解読2】main=print$do n<-[1..10];shows 3[f"\n"!!(n-1)]f x=x++f(' ':x)shows n で 3 に置き換えてみた。【実行結果】"3\n3 3\n3 3 3\n3 3 3 3\n"----------------------------------------------【解読3】main=print$shows 3 "\n"【実行結果】"3\n"【解読4】main=print$shows "3" "\n"【実行結果】"\"3\"\n"【解読5】main=print$shows '3' "\n"【実行結果】"'3'\n"ということは、【解読6】main=print$do n<-[1..3];shows n "\n"【実行結果】"1\n2\n3\n"おおー 見えてきたぞ!!shows は 要するに 1つ目の引数の型は何でもいいが、2個目の引数は文字列の型にして、結びつけるような関数か?shows の型と、Shows の型を見てみると、shows :: Show a => a -> ShowStype ShowS = String -> String上記のようになっていることから、なんとなく合っているような気もする。do n<-[1..10]; hogehoge っていうのも、C言語では、以下のような for 文を表しているようなものか。for (int i=1; i<11; i++) hogehogeとなると、あとは模範ゴルフコードに対して、考えるだけ。----------------------------------------------【解読7】main=print$take 50$f"\n"f x=x++f(' ':x)【実行結果】"\n \n \n \n \n \n \n \n \n "なるほど、f x はそのまま使うと、無限にループするので、何番目だけ取り出すか(!!)とか、何個目まで取るか(take)という使い方しないと無限に出力してしまうわけね。というわけで、あとは、上記のノウハウを型が合うように記述していったというわけか。いやー 疲れた疲れた。ふー