C#

正規表現で文字列の否定⑤

文字列処理でやってみた とりあえず ここ で以下の16個の正規表現を生成して、それらのルールを分析して、C#のメソッド作ってみたよ。 Regex01:文字列"0"を含まない任意の文字列とマッチする正規表現 Regex02:文字列"01"を含まない任意の文字列とマッチす…

正規表現で文字列の否定②

まずは文字列abを含まない文字列から考えてみた。僕ははあまり賢くないので、いきなり正規表現で考えると分からなくなりそうだったので、状態遷移図を描きつつ、有限オートマトンM0を構成してみた。オレンジ色の状態が受理状態で、いったん状態3に到達したら…

正規表現で文字列の否定①

bynatures.hatenadiary.jp を読んで、「正規表現は否定を上手く表せない?マジか!!」って思ったので、やってみた。とりあえず、紹介されている例を確かめてみた。 https://ideone.com/a38njo ん...??なんか変じゃね??

モデルの未入力チェックの挙動が理解できない

なんで勝手に未入力チェックされるのん? 以下のコードで、新規Personを追加しようとするきの話し。 public class PersonController : Controller { public IActionResult Create() { return View(); } [HttpPost] [ValidateAntiForgeryToken] public IActio…

C#での非同期処理

分かりやすくて良かったです。 tech-lab.sios.jp tech-lab.sios.jp

プロジェクトの参照設定

C#のプロジェクトの参照設定がよく分からない。ソリューションは以下のような状況になっている。 プロジェクトA 俺ライブラリ側。プロジェクトBや他のアプリなどでも使う(かもしれない)部品群。このプロジェクトの中で、とあるインターフェースX(.NET Fra…

日付や時間を表す文字列を受理するオートマトン③

どのパターンか判断できるようにしてみた。Ideone.com - vcrHk5 - Online C# Compiler & Debugging Tool

日付や時間を表す文字列を受理するオートマトン②

以下のフォーマットを受理するDFAを作った。 Ideone.com - FxXej0 - Online C# Compiler & Debugging Tool yyyy/MM/dd HH:mm:ss.fff yyyy/MM/dd HH:mm:ss yyyy/MM/dd HH:mm yyyy/MM/dd HH yyyy/MM/dd yyyy/MM yy/MM/dd HH:mm:ss.fff yy/MM/dd HH:mm:ss yy/MM…

整数を表す文字列を受理するオートマトン②

以前作った整数のオートマトン、文字列"01"を受理するかどうかはさておき、"0"を受理しないのは問題だと思うので修正した。

実数を表す文字列を受理するオートマトン③

先日εNFAをNFAに変換した。 今度はこのNFAをDFAに変換したい。これをやるのが「部分集合構成法」というものらしい。以下にDFAの状態遷移表を作っていく。 NFAの初期状態はのみなので、初期状態の集合はとなる。そして、初期状態の集合から遷移する可能性のあ…

整数を表す文字列を受理するオートマトン

正規表現は ^[-+]?[1-9][0-9]*$でいいんじゃないかな。これに相当する状態遷移図は でいいんじゃないかな。S2が受理状態。S3になったら直ちにエラーとして停止していい。これを元に作ってみたC#のクラスは interface Checker { /// <summary>このオブジェクトの状態を</summary>…

デシリアライズではまった

C#

次のサンプルコードのMyMapクラスのようなクラスをファイルにシリアライズしてデシリアライズすると、デシリアライズ用のコンストラクタの中で_entriesの要素が全部(null,null)になってしまう。entry.Item1とentry.Item2を使って処理をしていたので、実行時…

ループでEval(その1)

evalを再帰で書くとすぐStackOverflowExceptionで死んじゃうので、ループで書いてみようという試み。 単純に走査するだけのコードを前回のエントリで書いたので、それを使いつつ。 こんな感じ。 using System; using System.Collections.Generic; abstract c…

S式の要素を走査する

再帰とループの2通りの方法でS式(リスト)を走査してみる。ループの方はスタックの使い方これでいいのかよくわからんけど。 using System; using System.Collections.Generic; abstract class SExp { } class Pair : SExp { public SExp Car { get; private…

階乗計算

言語が提供するコールスタックを利用せずに再帰の要領で計算したくなった。特にオチは無い。 using System; using System.Collections.Generic; class App { static public void Main(string[] args) { const int N = 6; //////////////////////////////////…

外部イテレータもできた!

C#

前回 のForEachDetailを、外部イテレータからも利用できるためには、外部イテレータが「現在の値」を取得できるようにしないとダメ。2分木のイテレータに関して再開 - チキン煮込みチーズミックス4辛 からは内部イテレータだけに話を絞っていたので、ForEach…

内部イテレータできた!

C#

ForEachDetailLeftとForEachDetailRightを単純に組み合わせてできるわけじゃなかった。だけどヒントにはなった気がする。やり方は違うけど、結果的に 木構造の外部イテレータ - チキン煮込みチーズミックス4辛 となんか似てる。何がって言われてもよくわから…

再左の葉から根へ

C#

できたっぽい?こんな感じ。 /// <summary>左と自分を処理する</summary> static void ForEachDetailLeft( TreeNode<T> root, Action<T> action, JobHolder holder) { // nodeを根として、最小のノードまで進む TreeNode<T> n = root; while (n._left != null) n = n._left; // そこから</t></t></t>…

問題を単純にしてみる

C#

難しい原因は、 左の部分木を走査 自分の値を走査 右の部分木を走査 という感じで、再帰する部分が2ヶ所あることだと思う。ということで、まずは、 左の子を無視して、自分→右の子と走査する という感じで、ものすごく簡単にしてみた。するとこうなる。 /// <summary></summary>…

配列との違いは何だろう

C#

木構造の内部イテレータでつまづいている話の続き。木構造で考える前に、配列で考えていたので、それに戻ってみる。配列をラップしたMyArrayクラスのソースコードは以下の通り。 class MyArray<T> : IIterableIn<T> { T[] _ar; public MyArray(T[] ar) { _ar = ar;</t></t>…

2分木のイテレータに関して再開

C#

数か月放置していたこのテーマ。またこの数日考え始めたけど、まだ解決してない。yield returnで2分木の外部イテレータ作れたから、考える意味なくなったけど。いや!意味がないはずはない。どこかで役に立つはず!NextJobSetterやNextJobAccessorは、次に行…

yield returnで2分木の外部イテレータ

C#

yield return - チキン煮込みチーズミックス4辛 で、できないとか言ってたけどできるやんけ。なんでこんな事思いつかんのじゃ...。 // NodeクラスのGetEnumeratorだけ抜粋 public IEnumerator<int> GetEnumerator() { if (_left != null) { foreach (int n in _le</int>…

内部イテレータを外部イテレータに変形する(その2:2分木構造の場合)

C#

つづき。ようやく当初の目的だった木構造。 配列のときと同様、目標は、以下のような2分木クラスの内部イテレータTreeNode.ForEachを元にTreeNode.ForEachIterableを作成し、外部イテレータを返すTreeNode.GetEnumeratorからTreeNode.ForEachIterableを呼ぶ…

内部イテレータを外部イテレータに変形する(その1:配列の場合)再考

C#

木構造で考える前に、もうちょっと配列で考えてみる。(元ネタ:「http://d.hatena.ne.jp/terazzo/20090308/1236526403」) 「内部イテレータを外部イテレータに変形する(その1:配列の場合) - チキン煮込みチーズミックス4辛」の最後らへんでちらっと書い…

継続渡しに関する無駄思案

さっさと続き書けよって感じだけど。また横道へ。 継続渡し形式で手続きは、概念的に「呼び出し元へ戻る」ってことがなくなるので、例えばC#でちゃんとした継続渡し形式の手続きを書こうとすると、複数の文(セミコロンが2個以上)になることはないような気…

内部イテレータを外部イテレータに変形する(その1:配列の場合)

C#

「内部イテレータを外部イテレータに手動で変換してみる実験 - terazzoの日記」の「内部イテレータを外部イテレータに変形する 1.配列の場合」。かなり長くなってしまった。 ForEachの引数に渡すIntProcedureはPredicateで置き換えようと思ったけど、後々Int…

木構造の外部イテレータ

C#

ちょっと横道へそれる。 「ツリー構造用の外部/内部イテレータの実装 - terazzoの日記」には、以下の3つのアプローチによるm分木の外部イテレータの実装例がある。 いったん木構造を配列にしてから、その配列のイテレータを返す スタックで現在位置を保持し…

処理を保存してみる

C#

前回の続き。今回は「内部イテレータを外部イテレータに手動で変換してみる実験 - terazzoの日記」の、「継続渡し形式を中断可能にする」の部分。 前回はFactとFiboをCPS変換してFactCpsとFiboCpsに書き換えてみたけど、CPS変換前後で再帰関数であることは変…

CPS変換の復習

C#

木構造に対するイテレータに関して、もうちょっと考えると楽しそうな気がしていた(根拠は無く直感的に)のでぼんやりと考えてたら、 yield returnはコルーチンだし、コルーチンがあればイテレータが簡単に実装できるのかぁ... そういえばプログラミングGauc…

yield return

C#

イテレータを簡単に書けるyield returnが便利で好きなのだけれど、以下のようなのが書けたらなーと思ったのでメモ。 using System; using System.Collections.Generic; class Hoge : IEnumerable<int> { int[] _a; int _b; int[] _c; public Hoge(int[] a, int b,</int>…