ブログ「サイバー少年」

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

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

祝!ブログ「サイバー少年」、5周年!!! ~ 残り1年 ~

祝!
ブログ「サイバー少年」、5周年!!!


本日3月31日で、当ブログは開設から5年が経ちました!

十年一昔、ですから五年0.5昔ですよ。
とうとう歴史的な大台へ突入しました。

当ブログの右側にある月別記事リストは、長くなりすぎたのでデフォルトで閉じてるようにしましたが、開くとやはり長いなと思いますね。

というか、いま思ったのですが、毎月書いている勉強したことまとめ記事があるので一ヶ月に必ずひとつは記事を書くんですが、
それ以外のネタの記事も、どんなにクソブログ化している時期でも必ずひとつは書いてきたんですね。

月別に書いた記事の数の最小値が2件でした。


さて、前回ブログ4周年のときに書いた記事を引用します。

そしてこの記事は、451件目になると思うので、さらにペースは下がっていますが…。
しかし、4年目の一年でも記事を50件くらい書いていたというのは、意外ですね。



今回は、本記事で495件目の記事になりますので、ブログ4周年を迎えてから今回まで44件の記事を書いたわけです。
前回の50件より少しペースが落ちていますが、最近はだいたい一年に50件ぐらい記事を書いているんですね。

これからの一年は、50件ぐらいは記事を書きたいと思います。

続きを読む

tag: ブログ「サイバー少年」 周年 目標 記事 ソフト F#

F#の基礎勉強まとめ (後編)

記事「F#の基礎勉強まとめ (前編)」の続きです。
前編を読んでいない場合は、F#の知識がない限り前編から読むことをお奨めします。

今回は、かなり長くなることが予想されますね。


最初に、前編で書いたことの訂正というか、多相型についての発見があったので記しておきます。

まず、多相型の名前は'aのようにシングルクォーテーションとアルファベットだと説明しましたが、実際はシングルクォーテーションと任意の名前で多相型を表せるようです。
処理系が多相型であると推論したときは自動的にアルファベット一文字が使われるというだけのことで、自分で書く多相型の名前はなんでもありです。


そして、関数の引数が多相型になる場合があると説明しましたが、引数の型が多相型であると明示できるようです。
そのためには後述するパターンの型注釈を使用して、型名を多相型にします。

let func (x:'a) = x

しかし、多相型の引数であると明示したとしても、たとえば

let func2 (x:'a) = x + 1

と書いたらxはint型しかありえません。
このように型を限定するようなコードを書いたら多相型がもっと狭い型へと“制約”されてしまうので、なんでもかんでも多相型に出来るわけではありません。

さらに言ってしまえば変数でも型注釈で多相型に出来てしまうのですが、値を入れた段階で多相型がその型へ“制約”されてしまうので、多相型の変数というのも宣言できません。


また、同じスコープ内で複数回、同じ名前の多相型を使う場合、それら全てが同一の型であるという前提のもとで上手な型推論が行われます。

たとえば
let func3 (x:'a) = let val:'a = x in val
これはvalの型はxと同じで、xは多相型ですからxに与えた引数によってvalの型や戻り値の型が決まるようなジェネリックな関数です。

let func4 (x:'a) = let val:'a = 3 in val
これはvalの宣言によって'aがint型に“制約”されるので、この関数に与える引数はint型でなければなりません。


この話題は依然として謎深く、個人的にさらなる研究が必要そうです。

続きを読む

tag: プログラミング F# 関数型 勉強まとめ 例外 リスト ジェネリックス パターン

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

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

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

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

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

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

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

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


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

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

続きを読む

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

F#の基礎勉強まとめ (前編)

ついにやってまいりました。
今までF#の勉強をしてきたわけですが、勉強に使っているサイトで基礎編とされている部分を読んでいまして、とうとう読み終わったので内容をご紹介したいと思います。

学んだ文法を使って実際にプログラムを書けるかというと、まだちゃんとしたプログラムを書いたことはないし、正直、書ける気がしないんですけどね…。
記事「2017年 新年のご感想」でも書きましたが、文法を学ぶことと実際にプログラムを書くスキルを身につけることは別物なんだと思います。

それも含めて自然言語と人工言語という違いはあれど、新しいプログラミング言語を学ぶことは英語などの外国語を学ぶことと似ていると、今回F#の勉強をして思いましたね。

新しい言語機能を覚えれば新しい表現が可能なこと、それは他の言語機能で代用しても近い表現をすることは出来るのですが、新しい言語機能を使うほうが便利です。


というわけで、実践的なプログラムの解説をすることはスキル上の問題で出来ませんが、文法の解説をしていきます。

なお、めちゃくちゃ長くなることが予想されたので前編と後編に分けることにしました。

続きを読む

tag: プログラミング F# 関数型 関数 勉強まとめ

2017年 新年のご感想

あけましておめでとうございます!!!!!!


新年のご感想を記事にします!!
天皇陛下かよ!!

昨年末の記事でも同じネタを書いて使いまわしですが、時事ネタを今年は記事タイトルに使ってみました。

新年の記事は1月3日までに書きたいと姉妹ブログ「サイバー少年のつまらない事ですが」に書きましたが、ほんのちょっと遅れてしまいましたね。

まあこの記事を書き始めた時刻はギリギリ3日なので、セーフでしょう。


新年、2017年が始まりましたね~。
あらためまして、あけましておめでとうございます。

去年を振り返るというのは昨年末の記事でやりましたし、近況報告というか最近に興味のある物事を書くというのも、昨年12月の記事「何番煎じだ!?近況報告」でやってしまったので、今回書くことがないんですよね。

記事にするネタのなさから近況報告を記事にしてしまいましたが、頑張って他のネタでつなぐべきだったな~。


こうなってしまうと新年の抱負を書いてネタにするかとも思うのですが、去年と同じように特に抱負を設定しないというスタンスを踏襲したいんですけどね。
(記事「2016年 新年のご挨拶&去年の抱負大懺悔式典」を参照)

まあ、軽い目標程度は書きますか。

続きを読む

tag: 新年 目標 数学 F# 論理学 自然演繹 プログラミング コンピュータ 勉強 モチベーション

気がつけば年の暮れ 2016

こんばんは。真夜中ですね~。
生活リズムがぐちゃぐちゃですね~。
よろしいことではない…。

今年も終わりますね~。
今年は本当に早かったですね。

最近、なんとも年寄りじみた発言ですが、目まぐるしく時が過ぎていくので今年が西暦何年とかすぐに答えられるかと問われますと、危うくなってきました。

西暦はまだいいですが、和暦なんてもう出ないですね。
その西暦優位の感覚はちょっと若いのかな。
そうそう、あと、自分の年齢も同じように、すぐに出ないですよね。


当記事の本題に入る前にざっと年末の近況報告をしますが、前回記事「何番煎じだ!?近況報告」で書いた群・環・体のモチベーションが上がらないというのが、なんとまだ続いております。

さすがにヤバいですね…。
まあ上記記事でも書いた(さらに前の記事を引用した)のですが、ダラダラが続いてヤバいなと思い始めるのが、次の勉強を頑張る時期へと突入する原動力になるんですけどね。


一方でF#は、上記記事で書いたとおり勉強の頻度が少ないことを無視すれば順調…かと思われるのですが、姉妹ブログにも書きましたが最近なんか難しくなってきました。

次は判別共用体というのを勉強するんですが以前に内容をざっと見てみたら、今までで一番、難しそうでしたので理解できるかどうか不安ですね。

ただまあ、もし順調に事が運べば本年末に勉強したことまとめを書いて、来年に新年の挨拶記事なんかを書いて、来年の通常の記事の一発目はF#の勉強内容をまとめる記事になるんじゃないですかねぇ(他人事)。

続きを読む

tag: 数学 プログラミング 論理学 F# 群環体 勉強 パソコン 新年 目標

何番煎じだ!?近況報告

今、記事タイトル入力して間違えてエンターキーを押してしまって、タイトルだけで投稿されてしまいました。
なので現在から当記事を書き終わるまでの間に当ブログにアクセスした方はタイトルだけの記事を見て「なんだこれ!?」と思われるかもしれません。

たまにこういうのあるんですが、FC2ブログのこの仕様よくないですよね。
タイトルの入力ボックスではエンターキー無効にしてほしい。


さて、ネタがないので近況報告でつなぐという、当ブログがやる気のない時期によくやるやつです。

群・環・体やF#の勉強がもう少しまとまった成果を出せれば、内容をまとめる記事を書いてもいいかなと思っているんですが、
(まあ執筆が大変な部類なのでそれに耐えうるモチベがあればの話ですが)
最近はどうも勉強する気が起きない時期に突入してしまっておりまして、時間が掛かりそうです。

記事「論理学の勉強コンプリート!!!」で書きましたが、“頑張って勉強する時期、燃え尽きて怠ける時期、さすがに怠け過ぎだなと思ってまた頑張る時期、を繰り返している”というわけなんですよね~。


なんでそうなるのか自分でもよくわからないですけど、なんというか「数学おもしれえ!もっとやろう」という念と「うわっ数学むずかしいわ、やりたくねえ」という念の決して相反しない二つが自分の中で闘っていて、
やってる内容が難しい部分に突入してくると後者の念が勝ってしまうので、少なくともその部分を脱するまではペースも遅めになってしまうのかと思いますね。

そんでもって、今やってる内容は群・環・体でいえば置換群の性質を利用して組み合わせの問題を解くという部分を読んでるんですが、すごく難しいんですよ。

具体的には、記号が大量に定義されていて何が何を表してるのか意味分からなくなってくるのと、論理展開がめちゃくちゃ早いのが同時に襲ってくるので難しいです。

ですから今はあんまりやる気が出なくて、時間が掛かるわけですね。

続きを読む

tag: 近況報告 数学 群環体 F# 勉強 マイコン 電子工作

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 勉強 再帰 カリー化

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