サクサク読めて、アプリ限定の機能も多数!
トップへ戻る
ドラクエ3
igeta.cocolog-nifty.com
よく訓練された C# 使いならばご存じの通り、C# に末尾最適化はない。より正確に言い換えるなら、C# 4.0 コンパイラは 'tail.' プリフィックスを付与しない。このことによって、C# プログラミングにおいては、再帰はおよそ避けるべきものとして認識されている。しかし。 しかしポインタと再帰の明らかな重要性以上に重要なのは、これらの学習から得られる精神的な柔軟さと、これらを教えている授業からふるい落とされないために必要な精神的態度が、大きなシステムを構築する上で欠かせないということだ。ポインタと再帰には、ある種の推論力、抽象的思考力、そして何よりも問題を同時に複数の抽象レベルで見るという能力が要求される。そしてポインタと再帰を理解できる能力は、優れたプログラマになるための能力と直接的に相関している。 Javaスクールの危険 - The Joel on Software Transla
列挙型の列挙子を列挙したいというのは割とよくある話で、列挙子の名前と値を辞書として取り出すメソッド(関数)を作っておくと便利です。 at C# 現行最新版の C# 3.0 で。型パラメータに列挙型(enum)とその基になる型(underlying type)を指定して IDictionary を返す、静的メソッドを定義します。 using System; using System.Collections.Generic; static class EnumEx { public static IDictionary<string, TValue> EnumToDictionary<TEnum, TValue>() where TEnum : struct, IComparable, IFormattable, IConvertible where TValue : struct { var
[和訳] Announcing the F# 2.0 Standalone Tools Update (for .NET 2.0, 4.0 and other CLI Implementations) F# 2.0 スタンドアロン ツール アップデートのアナウンス(.NET 2.0 および 4.0、また他の CLI 実装のための) F# チームは、MSI および ZIP で自由にダウンロード可能な F# 2.0 August 2010 リリースのアップデートをアナウンスできることを非常にうれしく思います。この、F# 2.0 の MSI および ZIP リリースは、.NET 4.0 開発を可能にします。これは F# コミュニティにとって重大なリリースで、.NET 4.0 のために自由に使用できる F# プログラミング ツールの従来の入手可能性を広げます。 加えて、本リリースの MSI インス
'* Core 標準モジュール *' Option Explicit Private xList As List Private xProgram As Program Property Get List() As List Set List = xList End Property Property Get Program() As Program Set Program = xProgram End Property Function Box(ByVal v As Variant) As Box Set Box = New Box Box.Value = v End Function Sub Init() Set xList = New List Set xProgram = New Program End Sub '* List クラス モジュール *' Option Explici
当記事は Simple-Talk.com の著作物である以下の記事を和訳したものです。 Don Syme: Geek of the Week Copyright を確認の上、個人的かつ非営利な目的において当記事を公開いたします。もし問題があればすぐに削除いたしますのでご連絡ください。また、誤訳やよりよい翻訳があればぜひご指摘いただきたく存じます。 Don Syme: 週刊ギーク It came as a surprise to many of us when Microsoft pulled from it's hat a rabbit in the form of an exciting, radical, language that offers an effective alternative to the Object-oriented orthodoxy. The creativ
[Last-Updated 2009/11/24: 間違いを訂正し、全体的に文章の修正を行いました。] .NET 4 から、BCL にタプルが入りました。 組を構築する(Building Tuple) 結局、タプルは参照型として実装されましたが、それはほとんど値型として振る舞うべきものであるようにも見えます。タプルはただ複数の値をまとめるためにあり、興味があるのはそのまとめられた値の方です。となれば、なにか 2 つのタプルを比較するときには、タプルのインスタンスの参照比較ではなくタプルの中身の値によって比較を行いたい、という場合がほとんどではないでしょうか。 「Equals および等値演算子 (==) 実装のガイドライン」によれば、参照型においては、Point、String、BigNumber などの基本型を除き、等値演算子 (==) をオーバーロードしない方針がとられるようです。タプルは
subtyping (部分型)の話。僕が知る限りのごく狭い範囲では、メインストリームの静的型付け言語では nominal subtyping によって、動的型付け言語では duck typing によって、それは成されるようだ。それらには一長一短がある。間を取りたくなったら structural subtyping の出番だ。静的型付けの堅さを維持しながら、それでいて動的型付け言語の柔軟性にも触手を伸ばす。structural subtyping は、ハイブリッドな subtyping なのだ。 ちなみに先に告白しておくけど、本エントリでは OCaml、C++、Scala を題材とするが、僕は、いずれの言語をも使ったことがなく、一行たりともコードを書いたことはない。そんな人間が Web で拾った情報だけを頼りに書いている不甲斐ない文章だということを割り引いた上で、この先を読み進めていただけ
Excel のそれをエミュレートしたいって話。で、それって思った以上に単純なアルゴリズムだったって話。結局、グラフの要素値の、最大値と最小値の差を取って、その差分の最上位桁の数値で判別してるだけみたい。 /** * @arg min {float} グラフ要素の最小値 * @arg max {float} グラフ要素の最大値 * @return 目盛間隔 */ var getTick = function(min, max) { var eff = max - min; //最上位桁値 var sft = 1; //桁上げ倍率 while (eff >= 10) { eff /= 10; sft *= 10; } while (eff < 1) { eff *= 10; sft /= 10; } return eff >= 5 ? sft : eff >= 2 ? sft * 0.5 :
あかんたれの悪あがきWorkflow と呼ばれたりもするが Draft では Computation Expressions と表記されているわけでいまんとこ正式名称はそれなんだろう F# Monad なアレのことだけど、要はあれだ、行間に副作用を埋め込むことでトリビアルなわずらわしさを回避してコーディングできるってのがアレの価値なんであって、そんな難しく考えるようなもんでもないよなというか、あるいはもうちょっとプログラマよりな表現で言えば、忌まわしき多重ネストを見た目フラットに書きやすくするための記法ぐらいの位置づけの機能であって、やっぱり難しく構えるほどのものでもないようなっていうか、まあなんだ、なんかそういう話から始めてあれやこれや、エイプリルフール ネタとしていけしゃあしゃあ書こうかどうかみたいなことを考えていたのだけど、いやーすっかり忘れていてなんだよもう 4/3 じゃないかとい
ここに示すのは、今は無き Hawk's Laboratory で公開されていたネタをもとにしている。 イベント ハンドラのバインドが、VBScript では Sub ObjectName_OnEventName(...) ... End Sub だけど、JScript では function objectName::OnEventName(...) { ... } とか、じゃなくて動的な追加/削除はどうするんだ、ああ attachEvent/detachEvent か、みたいなところで軽くハマりつつ、僕がすこし改造したものである。 WBEM の MS 実装であるところの WMI を JScript から叩いてフォルダ監視する HTA。 <html lang="ja"> <head> <meta http-equiv="Content-Type" content="text/html; ch
Home Microsoft F# Developer Center MSDN の Developer Center。 F# Microsoft Research Site Microsoft Research サイト。 The F# Language Specification 言語仕様(ドラフト)。 F# Library Reference ライブラリ(in FSharp.Core.dll, FSharp.PowerPack.dll, FSharp.PowerPack.Linq.dll)リファレンス。 Community hubFS: THE place for F# - Forums F# フォーラム。運が良ければ中の人がレスしてくれる。 Hottest "f#" Questions - Stack Overflow 割と活発。 Subscribe to the F# Mailing
不動点とは、関数を適用しても動かない点、つまり、f(x) = x なる x が不動点である。 と、簡潔に説明されても理解できない素地のなさ。そんなわけで、ググりつつ、妄想しつつ、なんとか解せぬものかと頭をひねり、首をひねるのである。 一次関数で考えてみる。たとえば、y = 2x - 3 (傾きが 2 で切片が -3)において、y = x であるときの x を求めればよいので、y に x を代入し、x = 2x - 3 を解いて、x = 3 が得られ、よって、y = 2x - 3 の不動点は 3 である。グラフで考えれば、x 軸と y 軸が同じである点が不動点であるので、不動点とは、ある関数 f(x) が f(x) = x (傾きが 1 で切片が 1)のグラフと交わる点である、と言い換えることもできる。 ここで、f(x) = x を x 軸上に横に平行移動したようなグラフについて考えれば、そ
こんなこともできますがどうでしょうネタ。機能的には version 1.1.10 から存在するものらしいので、特に目新しくはないのかもしれないけれども。それはそれとして。 Functional Reactive Programming (FRP) なにそれっていう。日本語で読めるものでは、以下のエントリが詳しいようだ。 Lightweight Language Weekend(『5分間で Reactive Programming について説明する(Haskell)』の発表資料を参照) ReaJ / Reactive JavaScript - Derive Your Dreams WPF の binding に驚いた人をさらに唸らせるかもしれない Mathematica の Dynamic - NyaRuRuの日記 Functional Reactive Programming - NyaR
DBのパスを動的に変更: DOBON.NETプログラミング掲示板過去ログ ブクマでいいかなとも思いつつ、埋れさせとくにはちと惜しい。いや、こんな弱小ブログで紹介したところで広まりはしないんだけれども。ともあれ、上記リンク先でなおこ(・∀・)さんが書き込まれているテクニックをご紹介させていただきたい。 まず、なにをしたいかというと、DB の接続文字列をプログラムから動的に変更したいということ。本番環境 DB と開発環境 DB を切り替える機能を付けたいってのは、よくある話だと思う。 しかし、これがふつうにはできない。例えば、[データ ソース構成] ウィザードを使った場合、接続文字列は、データセット(.xsd) のコード上に直に書き込まれるか、あるいはアプリケーション設定ファイル(Settings.settings)に格納される。前者は論外であるが、後者の場合においても、型が接続文字列である設
大きく振りかぶってー、間違えた。 いげ太のブログ: [JavaScript] 図解で簡単プロトタイプチェーン がっちりみっちり誤った内容だった。どこがどう間違えてたかを言っても始まらないというかややっこしいだけなので、正しい内容の記事を書くことでその訂正としたい。 /** 1. define ParentClass ****************************************************/ var ParentClass = function() {} ParentClass.prototype.ParentProp = "ParentProp"; /** 2. define ChildClass *****************************************************/ var ChildClass = function(
だから匿名関数の即実行なんかがトピックスになったりするのだけれど、再帰呼び出し可能である点を除けば、それって他の言語にはよくある空ブロックでしかない。JavaScript において、新たにスコープを作るのは function 式のみだ。基本はそう。しかし、with 文と eval 関数についても押えておいたほうがいい。両方とも、使用を控えるべきものだが、知識は備えるべきであろう。 それと、忘れちゃいけない catch 節。スコープという話題の中で特に言及する必要もなさそうなもんだが、実際にスコープを生成するのだから取り上げないわけにはいかないだろう。 ということで、論よりコード。今件の場合、特に説明しなくとも下記のコードを見れば一目瞭然だろう。ただ、なんか、気が向いたらしれっと追記したりしなかったりするかも。。 var x = "global"; var f = function() {
[追記 at 2008/09/20] すいません。ここにかいてあることは間違いだらけです。訂正記事を書きましたので、よろしければそちらをご覧ください。 [/追記] ふと、昔やったネタを掘り起こしてみたり。 いげ太のブログ: プロトタイプチェーンの図とか これはこれでそれなりにいい図だとは思うんだけど。プロトタイプチェーンによる継承に特にフォーカスしていて、すっきりした見た目にするためにオブジェクトをネストさせて表現しているので、拡張性の乏しい図になっている。要するに、constructor プロパティとかも書き込もうとすると、なんかぐちゃぐちゃんなる。 ならば、ネストを解いてやって、もっと汎用的な図に変形しよう。そうしたあとで、さらに多くの要素を詰め込むわけだから、多少複雑になるのは覚悟した上で。 これじゃまだ雑か。Object オブジェクトの __proto__ プロパティと Func
Mix-in ってなにさ イコール多重継承でしょ、と思ってたらちょっと違うようで、また、複数インターフェースの実装を指すのでもないようだ(囚人さんの記事が参考になる)。さりとて、duck typing や structural subtyping の話かというと、それはむしろ論点がズレている。混乱してきた。Wikipedia もめくっておこう。 Mixin は、メソッドが実装されたインターフェースとして見ることもできる。 …(中略)… Java や C# などの一般的な言語では、Mixin の機能の一部は、インタフェースにより提供される。しかし、インタフェースはクラスがサポートしなければならないものを指定するのみで、実装を提供しないため、ポリモーフィズムを提供するためにのみ有用である。インターフェイスに依存し実装を提供するクラスが、共通の振る舞いを一箇所にリファクタリングするために有用であ
だいたい僕は不埒な性格で、難しいことはいつも後回しにしてしまう。なりゆき、ギリギリになってから事に追われるか、あるいは、なんとなくやらないで済ませてしまうということになる。いずれにせよ、そうやって得た結果は、たいてい酷いものになるのがオチだ。 簡単さはまぎれもなく強力な動機付けになる。事実、F# が備える Async は、僕に .NET が持つスレッドのしくみを学び直すきっかけをくれた。理解したことが正しいかは知らない。けれど、理解しようとして歩むこの道の正しさだけは信じていたい。たいていの場合、無謀さに気づくのは後になってからだ。とりあえず信じて進んでみるのも悪くない賭けだと思わないかい。 .NET でマルチ スレッド .NET 上でスレッドを扱うためのしくみは、根本的には 2 つしかない。スレッドを直に扱う(Thread)か、スレッド プールのしくみを通じて扱うかだ。ただし、さらに、ス
Microsoft Visual Studio 2008 Shell (integrated mode) で F# 無償開発環境 試そう試そうと思ってていつも忘れてたのだけど。もっと早くにやっておくんだった。Microsoft Visual Studio 2008 Shell (integrated mode) を導入すれば、無償の F# 開発環境が手に入る。噛み砕いて言えば、C# も VB.NET も C++/CLI も、何の言語もバンドルされていない Visual Studio 2008 が、タダで手に入るってことだ。 ということで、さっそく下記のアドレスからダウンロードしよう。ちなみに、うちの環境(ADSL 下り最大 50Mbps)で 15 分そこそこかかった。 ダウンロードの詳細 : Visual Studio 2008 Shell (integrated mode) ダウンロード
Don Syme's WebLog on F# and Other Research Projects : Some Details on F# Computation Expressions F# の作者 Don Syme 自らによる computation expressions の解説だ。sequence expressions を一般化した computation expressions を使えば(Haskell の)モナドっぽいことができるよ、というのが大筋の内容である。すばらしい記事ではあるのだけれど、F# あるいは OCaml の基礎をおよそ理解していて、モナド(のような観念)についても知っていて、また、英語もそれなりに、という人でないと、ちょっと読むのが厳しい内容になっている。 僕はといえば、いま挙げたすべての要素がだいぶ足りてないので、漠然とした理解でさえもいままでままな
log4net を使ってみた。いやはやすげー便利だ。なんでいままで使ってなかったのか。 どうせログ ファイル取るだけでしょと思っていたが、それは全くの誤解。ファイル、コンソール(VS の出力ウィンドウ)、データベース、メール、NetSend コマンド(Messenger サービス)、そしてイベント ログに至るまで、ありとあらゆる出力先を選べるなんて。ロギングは、運用のみならず、デバッグのお供でもあったなんて。 でね、config ファイルに設定するだけでいとも簡単にそれができるわけなんだけども。旧バージョン向けの情報が検索で上の方にきたり、お望みの設定を得るまでにそこそこの時間を取られたりしたので、ここにメモしておく。現時点(2007/06/05)の最新バージョン、log4net 1.2.10 における俺設定。 log4net なんたるかは CodeZine あたりを見てもらうとして、早速
Workflow と呼ばれたりもするが Draft では Computation Expressions と表記されているわけでいまんとこ正式名称はそれなんだろう F# Monad なアレのことだけど、要はあれだ、行間に副作用を埋め込むことでトリビアルなわずらわしさを回避してコーディングできるってのがアレの価値なんであって、そんな難しく考えるようなもんでもないよなというか、あるいはもうちょっとプログラマよりな表現で言えば、忌まわしき多重ネストを見た目フラットに書きやすくするための記法ぐらいの位置づけの機能であって、やっぱり難しく構えるほどのものでもないようなっていうか、まあなんだ、なんかそういう話から始めてあれやこれや、エイプリルフール ネタとしていけしゃあしゃあ書こうかどうかみたいなことを考えていたのだけど、いやーすっかり忘れていてなんだよもう 4/3 じゃないかという、まあそんな状況な
自分用に図を描いてみた。JavaScript のプロトタイプチェーン。たぶんきっとこんな感じかなと。 [追記 at 2008/04/30] constructor プロパティも書き加えた、より汎用的な図はこちらで。 [/追記] で、これは以下のコードを基に図に起こしたもの。いろんなサイトを巡って勉強するのももちろんだけど、やっぱり自分でコード書かないと身に付かないなぁとしみじみ思ったり。 ちなみに、__proto__ プロパティは基本的には内部プロパティであり、一部のホスト環境でしかアクセスできないのでご注意を。Firefox では動きます。 //画面表示関数 function debugPrint() { var separator = " "; alert(Array.prototype.join.apply(arguments, [separator])); }; /**
ここで、簡約(reduction)とは、式を計算して等価なより短い式にすることをいう。式を計算して値を得ることとほぼ同意であると思って構わない。以下、これら各評価戦略について詳しく見ていく。 Use Strict 正格な言語では、値呼び出しと参照呼び出しの 2 つの戦略が採られる。値呼び出しでは、引数に指定された式を計算して、その結果得られた値のコピーを渡す。参照呼出しでは、引数に指定された式の計算結果をメモリにおいて、その番地を渡す。どちらも、先に引数の式を計算してしまってからその値か番地かを渡す戦略であり、そのことを指して、これらの評価戦略は最内簡約とも呼ばれる。また、値呼び出しと参照呼び出しは、一般的には、値渡し、参照渡しと呼ばれ、初学者がつまづきやすく、混乱しやすい部分としてよく話題に上る。 具体的な各言語実装を見てみよう。まず、なにはなくとも C 言語。C 言語では、値渡しのみが
public enum TimeCycle { [LabeledEnum("日次")] Daily, [LabeledEnum("週次")] Weekly, [LabeledEnum("月次")] Montly, [LabeledEnum("年次")] Yearly } /// <summary> /// 列挙型のフィールドにラベル文字列を付加するカスタム属性です。 /// </summary> [AttributeUsage(AttributeTargets.Field, AllowMultiple=false, Inherited=false)] public class LabeledEnumAttribute : Attribute { /// <summary> /// ラベル文字列。 /// </summary> private string label; /// <summa
あくまで試みであって、ベスト プラクティスなんかでは到底ないのであしからず。要はチラ裏ネタだ。て、このブログ自体チラ裏以外の何物でもないか。 さて、ここ最近 COM 周りについて調べているのだけれど、サンプル コードがなかなか見つからない。こうすればいい、ああすればいいって方法論は見かけるんだけど、じゃあ具体的にどうするのってのは書いてくれていない。そこは自分で考えろ、てことなんだろうか。 で、ない中で見つけたのが Hongliang さんの記事。んー、とってもありがたい。そして、とっても難しい。 自分の不勉強を思い知らされ、とりあえずとばかりに前回はお勉強エントリを書き、そして今回、実装にこぎつけた。こんな感じでどうだろうか。 using System; using System.Collections; using System.Collections.Generic; using S
F# なる言語があることを知る。ちょいと探りを入れてみれば、開発中の報が 2003/05/29 の /.J にあがっている。いまさらなネタであることが露見したが、まぁそれもよし。それにしても情報が少ないが、流行ってないのかね。 F# - Microsoft Resaerch ライセンス 見ての通り、F# は MS によって開発されており、バイナリも無償で提供されている。ただし、製品ではなく、リサーチ プロジェクトという位置付けの、まだ試験段階の言語である。ライセンスについては、Microsoft Research Shared Source License Agreement (MSR-SSLA) なるものをベースにしており、リンク先のトップページにはこうある。 The F# License is a Microsoft Research Shared Source License Agr
いたるところで書かれてはいるものの、個人的に、それその記事ひとつで理解できるというようなズバピタな記事がなかったので学習メモ。ていうか、調べてたらキリがなくなってきたので、いったんフィックスしたい。 ランタイム上で暗躍する RCW .NET から COM オブジェクトを扱うということは、マネージドからアンマネージにアクセスするということであり、すなわちマーシャリングが必要となる。これは、ランタイム呼び出し可能ラッパー(RCW: Runtime Callable Wrapper)なるしくみによって行われる。 図: クライアント --> RCW --> COM オブジェクト 通常、.NET クライアント(アプリケーション)が直接的に扱うのは、生身の COM オブジェクトではなく、そのラッパーたる RCW である。ランタイム(.NET Framework)によってサポートされるため意識しづらいが
次のページ
このページを最初にブックマークしてみませんか?
『igeta.cocolog-nifty.com』の新着エントリーを見る
j次のブックマーク
k前のブックマーク
lあとで読む
eコメント一覧を開く
oページを開く