ブログ「サイバー少年」

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

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

10月

コンピュータ関連で覚えた技術
・F#を少し触ってみた。
・Blend for Visual Studioでビヘイビアやストーリーボードを少し触ってみた。

その他で覚えた技術
・シークエント計算について学んだ。
・集合と写像について一部を再学習した。
・自然数や整数の性質を少し学んだ。

コメント
上の2つは成果無しと言える程度ですが一応、今回は多めですね。記事にもしましたが、今回でとうとう論理学の勉強が完了しました。下の2つは群・環・体の本を読んで学んだことですが、たいした勉強量ではないです。

tag:

C#の独自ソートで順序関係を壊す

今回C#の記事ではあるんですが、実質的には特定のプログラミング言語に依存しない話です。
そして数学の順序関係からヒントを得ています。


さて、C#ではIComparer<T>インターフェースを実装するクラスを定義し、Compareメソッドを実装してやることにより、
リストのソートなどで要素同士を比較するときに使うメソッドをカスタマイズできます。

しかしながら、ふと思ったのですが、どのようにこのCompareメソッドを実装してもいいわけではなくて、書き方次第では正常にソートできなくなってしまうのではないかということが、

まあ考えてみれば当たり前のことではあるのですが、ピンときたわけであります。


たとえば、以下のようなコードを書いてみます。


class WrongComparer : IComparer<string> {
  public int Compare(string x, string y) {
    return 1;
  }  }

これは常にxがyより大きいことを意味しています。

ここでstringのリストlistで、list.Sort(new WrongComparer())を実行してみました。


すると例えばlistが { "Red", "Green", "Blue" } だったとき結果は { "Blue", "Green", "Red" } と逆順になりました。

MSDNによるとSortメソッドは要素数が16個より小さい場合は挿入ソートを使用するそうですので、もし一番後ろの"Blue"から入れ替えを始めていたとしたら、

最初は"Blue"が配置されて、次にCompare("Green", "Blue") == 1より"Blue"の後ろに"Green"、次にCompare("Red", "Green") == 1より"Green"の後ろに"Red"という感じで、順番がひっくり返るのもうなづけますね。

続きを読む

tag: C# リスト ソート 数学 順序 関係 クソ記事 クイックソート

F#の勉強を始めた感想

最近、数学が好きなわけですが関数型言語は数学に近いようなので、ずっと新しいプログラミング言語を覚えるのは新年の抱負とかいうやつで目標にしていたわけですし、
関数型言語を覚えよう!と思いまして、.NET系列ということで手の届きやすいF#の勉強を、ぼちぼちと始めました。

というわけでF#の記事をいくらか書くかもしれないので「F#」カテゴリを作成。


そういえば昔、当ブログも、Microsoft MVP for F#を受賞されていて恐らく日本のF#業界の第一人者であろう“いげ太”さんからコメントもらったことありましたね。
(記事「Twitter上の有名人に見られている…!?」を参照)

当時はF#なんて興味ありませんでしたが、あの時に色々聞いておけばよかったな~と思います。

SwiftとかはAppleがメインで推しているので情報も多いのかと思いますが、Microsoftがメインに位置づけているのはC#であって、F#って少しマイナーなので日本語の情報が少ないんですよね。

スペシャリストの“いげ太”さんなら何でも知っていたであろうと…。


さて、F#って今は開発環境がVisual Studioに標準でインストールされていたりして、わりと楽に始められます。

私はコンパイラでやってますが、F#の解説サイトはコンパイラが標準搭載される前から存在していたからか、一行ずつ実行する対話型のインタプリタを使っての解説となっているんですよ。

だから、文の終わりのセミコロンとか、コンパイラとは微妙に書き方が違う部分があるんじゃないかな。
だから、そういう些細な違いが私のような初学者にはキツいですよね~。


私がF#を勉強していて現状、一番わからないのは文法機能じゃなくて、
ここはセミコロン1つでいいのに、ここは2ついるとか、でもここで2つ書いたらエラーになるとか、セミコロン要らない場所もあるとか。
letで宣言したあとセミコロンを書かないといけなかったりinを書かないといけなかったりとか、

どう表現するべきかよくわかりませんけども、文の構成に苦戦していますね。

続きを読む

tag: プログラミング 数学 F# 関数型 MicrosoftMVP 勉強 再帰 カリー化

数学の学問としての位置づけとは?? ~ プログラミングも ~

数学をやらぬ者に数学が語れるか。
こんなメタな考察をする前に数学の記事を書けと言われるかもしれませんが、こちらのほうが書くのが楽なのであえて数学という学問自体への考察を行ってみます。

こういう考察を行うのは哲学の分野でわりと行われているのかなというイメージですね。
科学哲学というのかな。

まあ私はそんな科学哲学ガチ勢ではないので、テキトーに思ったことを綴るだけです。


数学とはどういう学問なのでしょうか。

学校の数学だけやってると、ひたすら計算する学問なのかなという印象を持ってしまいますが、
たしかに計算するという側面もあるけれど、そのバックボーンには理論だとか概念を扱う側面がなければならないわけで、後者の側面を“数学”と呼ぶのが良いんじゃないかと私は思います。

つまり、数学というのは理論だとか概念を扱う学問だということです。


そして、どのような“理論だとか概念”を扱うのかという問題に対して、私のやってる数学の分野に起因する考えかもしれませんが、

何らかの数量の間の関係を扱うだけではなく、はたまた図形についての性質を扱うだけではなく、実は何でも扱えてしまう超万能な学問が数学なのではないかと思います。

それはどういうことかというと、物理学は現実世界の形而下の物事を扱いますし、たいていの学問には扱う領域があって、それはこの世の森羅万象と比べてみれば大変狭い領域なわけですが、

数学というのは“人間の思考”というものが扱う領域なんだろうと思うのです。

人間はあらゆる学問において、この世の物事を見て、思考するという工程があるわけで、思考した結果のアウトプットを学問の内容といいますか理論にするわけですから、思考というものを制する数学は最強ですね。


ただし思考を扱うというのは、色々なアプローチがあると思うのです。

たとえば私は言語学について全く知らないので的はずれなことを言っていたら恐縮ですが、人間は言語を使って物事を思考するので、その言語というものを扱う言語学も数学と並んで人間の思考を扱う学問でしょう。

むしろ、数学は数学という言語を使って物事を考察していると考えることもできますね。
それならば真に最強な学問は言語学ということになりますが、なにせ言語学について知らないので、そう考えるのはやめておきましょう。


数学は思考を扱うアプローチとして主に集合や写像などを使います。
これらは、概念や、イメージの手段を抽象化した道具であると言えると思います。

他にも数学といえばそりゃ数値というのを使いますが、これも数量という概念を数値というものに落とし込んでいるわけですね。
ときにそれは数というのは集合なんだという話に昇華しますが、まあ数が集合であっても数であっても抽象的な道具であることには変わりないのでいいでしょう。

ようするに、思考についての物事をある別のものに対応付けたのが数学ですね。
あーでも、それだとやっぱり数学は言語だということになるなあ。

まあ言語学が(完璧に妄想ですが)物事の表し方に主眼をおいているのに対して、数学は表された物事と物事の間の関係に主眼をおいている気がします。


あとさらに詳細には、表された物事を意味も含めて扱う意味論というのと、単純に記号としてのみ扱う構文論という二つのアプローチが、数学にも言語学にも存在しますね。

ただ数学においては意味論がベースになってくると思います。
それは具体的な思考対象があっての数学なわけですから、意味が存在してくるわけですね。

構文論っていうのは数学においては、単なる思考を単純化するツールみたいなものかなと、素人ながらに思います。

続きを読む

tag: 数学 プログラミング 形而 哲学 学問 言語学 理系 考察

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