ブログ「サイバー少年」

ブログ「サイバー少年」へようこそ!
小学六年生ごろからプログラミングを趣味にしている高校生のブログです。
勉強したことについての記事などを書いています。フリーソフトも制作、公開しています。
(当ブログについて詳しくは「ブログ概要紹介」を参照)

サイバー少年が作ったフリーソフトは「サイバー少年の作品展示場」へ

近況報告というか話題のちゃんぽん

ただいま、記事「F#の基礎勉強まとめ (前編)」の後編を執筆中であります。
途中つなぎの記事を書くほど大規模なブログ記事を書くのは久しぶりですね。

現在、リスト、配列、タプル、レコードまで書き終わったのですが、判別共用体、パターンマッチ、例外を書いて手短に終わろうと思います。

ただし、パターンマッチが本当に内容的に濃い!
大変ですね。

さて、上記リンクの記事でも書いてあるように、F#の文法は解説しても、実際にプログラム書いたことがほぼ無いんですよね~。

というわけで、ちょっと前ですが、なにかプログラムを書こうということで、なんともベタなじゃんけんのプログラムを書きました。

せっかくなのでYahoo!ボックスに上げておきましたから、ご覧ください。
なにせF#の経験が浅いので、変な箇所があるかもしれませんが、ぷぷぷ~と笑ってないでコメントにてご指摘下さいませ。

Janken.txt (Yahoo!ボックス)
http://yahoo.jp/box/_9_RYk


このプログラムを書きながら思ったのですが、関数に引数として別の関数の戻り値を渡してもいいし、
関数に直接、別の関数を渡しちゃって、むこうの関数で引数を与えて戻り値を作ってもいい、というこの関数と値の区別のルーズさは特徴的ですね。

今回の場合は逆にそれがややこしくなって、変なプログラムになってしまったかもしれませんが…。




ちなみに、今回のじゃんけんプログラムでは勝敗判定に条件分岐を2回にネストするという原始的な手段を用いていますが、

グーを0、チョキを1、パーを2で表したら
(プレイヤーの数値) - (コンピュータの数値) mod 3
という式が、2ならプレイヤーの勝ち、1なら負け、0ならあいこ

という法則が成り立つそうです。
これなら条件分岐1回で事足りますね。

ただしプログラミング言語ではモジュロ演算が負数を返してしまう実装もあるので、modする前に3を足して正数へスライドするほうが確実です。

それはいいとして、この法則が成り立つことを数学の剰余類を使って証明できるんじゃないかと、やんわり感じたのですが、相変わらず発想力と論理力がないので証明できませんでした。

誰か証明してください(泣)


まあ、自分で証明しろという話なんですけどね~。
発想力は鍛錬で身に付くんでしょうか。

まあ発想力はさすがにセンスだけなのかもしれないですが、論理力は鍛錬によって身に付けることが出来るかもしれないですね。


証明する力がないといえば、勉強したことまとめの記事「2月」でも触れたのですが、

この前、(ab)c = a(bc)という単純な結合法則から、もっと積の数が増えたときにどのように括弧を付けてもいいという一般結合法則というものが成り立つかと考えたのですが、全然わかりませんでした。

そこでググったら証明のPDFがあったので見たら分かりましたが…。

まず、どのように括弧を付けてもいいということを形式的にどう表現していいのやら分かりませんよね。
n個の要素を普通に積にしたものと、それをあるrを用いてr個目の要素までとそれ以降で2つの括弧で分割したものの積が等しくなるといえばいいようです。

まあ、そうなるなら、内側から順番にひとつずつ再帰的に括弧を取り除いていく変形ができるので、確かにどう括弧を付けてもいいことになりますね。


あと、そのPDFの下に群Gの全ての要素a,bについて(ab)(ab) = (aa)(bb)が成り立つなら、Gは可換群であることを示せという問題があったのですが、これも数日考えていました。

そしたら奇跡的に、群の簡約法則を使えばいいんや!とひらめいて証明できたので、これは良かったですね。


それと数学やる前に数理論理学の勉強をしておいて良かったなと思いますね。
証明する際に思考のいいサポートをしてくれます。

まあたいして論理力が身に付いたわけではありませんでしたが…。
ただ、「こういう命題の変形してもいいのかな~」と不安になったときに論理学で正しいことが示せるor既に示されているのを記憶しているので、そこらへんが良いです。


現在は群の要素aと逆元a'がa = a'のときaは単位元なんじゃないかなと予想を立てて証明しようと思っているのですが、全然わからないので諦めてYahoo!知恵袋に質問しようと思ってます。

そもそも逆の命題の、aが単位元のときa = a' = eというのも証明しようと思ったのですが出来なかったんですよね。
こちらはググったら出てきましたがめちゃめちゃ基本的そうな問題でした。

本当に発想力が無いですね…。
あと以前もブログで書きましたが、ちょっとずつ理論を組み立てていく力が無いんですかね。


こんな感じで自分の数学力の無さに打ちひしがれておりましたら、学校の数学の先生に「数学は出来るとか出来ないとかじゃなくて考える過程を楽しむもの」と言われました。

おっしゃる通りでございます。
感動いたしました。

でも出来ないのつまらない!!!!
無駄に難しいゲームとかつまらないじゃないすか!!

それかなんですか、数学は困難を快感に変えるドM専用の学問とでも言いたいのですか。
数学は科学の女王とか言いますからね。そうですか。

数学はもっと能力のない人に優しくなっていただきたいですね。


あとクソどうでもいい話題をもうひとつですが、一応、記事「新タブレットPC購入を決意する」で書いたように、今年の春に発売される予定の新型のiPadが発売されたら、それを買うか、型落ちしたiPad miniを買う計画なのですが、

Nexus7の処理速度の低下が非常に激しくて、最近は正直、使い物になりません。

別に新しい常駐のアプリを増やしたわけでもないので、時間と共に処理速度が低下していく現状は経験上、理解しがたいのですが、なんなんですかね。

バッテリーとかは劣化しますが、CPUとかは劣化しませんからね。
考えられるとしたら主記憶装置の劣化でしょうか。うーん。


タブレットかなり使うのにタブレットが使いものにならないという矛盾を抱えており、はやく買い替えたいのですが新型のiPadが出るまで待ちたいというジレンマです。

まあ、実は記事にしませんでしたがスマートフォンに変えてもらったというか、ガラケーとの二台持ちというか、WiMAXとの三台持ちなので、ちっこいスマートフォンでしばらく我慢します。


さて、ここらへんで言いたいことを言い尽くしました。

今回は話題がカオスなことになっているので、カテゴリはその他にしておきます。
その他カテゴリの記事多すぎですけどね。

まあとりあえず、F#の勉強まとめを近いうちとまではいきませんが、そのうち公開しますので、ご期待ください。

tag: プログラミング F# 数学 証明 論理学 勉強 群環体 結合法則 Nexus iPad

コメント

コメントの投稿

トラックバック

トラックバック URL
http://cyberboy6.blog.fc2.com/tb.php/492-ed96dec8
この記事にトラックバックする(FC2ブログユーザー)

当ブログをご利用(閲覧等)になる場合は必ず「当ブログの利用規定」をお守りください。