Out of Memory

本ブログは更新を停止しました。Aerieをよろしくお願いいたします。

目次

Blog 利用状況

ニュース

2009年3月31日
更新を停止しました。引き続きAerieを御愛顧くださいませ。
2009年2月3日
原則としてコメント受付を停止しました。コメントはAerieまでお願いいたします。
詳細は2月3日のエントリをご覧ください。
2008年7月1日
Microsoft MVP for Developer Tools - Visual C++ を再受賞しました。
2008年2月某日
MVPアワードがVisual C++に変更になりました。
2007年10月23日
blogタイトルを変更しました。
2007年7月1日
Microsoft MVP for Windows - SDKを受賞しました!
2007年6月20日
スキル「ニュース欄ハック」を覚えた!
2006年12月14日
記念すべき初エントリ
2006年12月3日
わんくま同盟に加盟しました。

カレンダー

中の人

αετο? / aetos / あえとす

シャノン? 誰それ。

顔写真

埼玉を馬鹿にする奴は俺が許さん。

基本的に知ったかぶり。興味を持った技術に手を出して、ちょっと齧りはするものの、それを応用して何か形にするまでは及ばずに飽きて放り出す人。

書庫

日記カテゴリ

比較演算式への妄想

ネタ元:比較演算式へのこだわりR.Tanaka.Ichiro's Blog

※以下、コードっぽく書いてあるのは、すべて実在しない妄想文法です。

いつも以下のような記法が欲しいと思っています。
x : >= 10 && <= 20 && != 18

素晴らしいですね。是非欲しいです。

ところで、比較は、大小比較ばかりではありません。
広義には、String.StartsWith とか、SQL の IN とか ANY とかも比較のうちに入るはずです。

例えば、「ある文字列 x が、"Foo" か "Bar" で始まるか?」という検証はどうなるでしょう?
こう?

x : .StartsWith( "Foo" ) || .StartsWith( "Bar" )

…VBのwithみたいですね。

さて、このコードを、素直に日本語に訳すと、「x が "Foo" で始まるか、または "Bar" で始まる」になります。
一方で、題意は「x が "Foo" または "Bar" で始まる」でした。
あくまで、日本語を素直に翻訳することにこだわると、

x.StartsWith( "Foo" || "Bar" )

こんな感じになるかもしれません。
論理型以外に対する || 演算子が、項を連結したリストを生成すれば可能かもしれませんね。
ショートサーキットを実現するには、遅延評価も必要になりそうです。

.NETのSystem.Stringには存在しませんが、「文字列中に特定の部分文字列を含むか?」を判定するメソッド Contains を考えると、

x.Contains( ( ( "Foo" && "Bar" ) || "Zee" ) && ! "Goo" );

こんなのも書けます。
意味はもちろん、「x は、"Foo" と "Bar の両方、または "Zee" を含み、"Goo" を含まない」です。
普通に書くとこうですね。

( ( x.Contains("Foo") || x.Contains("Bar") ) || x.Contains("Zee") ) && ! x.Contains( "Goo" )

他にも、「ある数値型変数aが、i、j、kのいずれよりも大きいか」は

a > ( i && j && k )

とか、「aがi、j、kのどれかよりも大きいか」なら、

a > ( i || j || k )

とか。

妄想ですよ、妄想。

投稿日時 : 2008年1月23日 15:38

Feedback

# re: 比較演算式への妄想 2008/01/23 16:26 R・田中一郎

文字列系の場合は、正規表現の方がわかりやすい場合もあるかもしれません。
数値の場合は、ある程度限定されるという意味では、簡素化した記法が会っても良いとおもうんですよね。
COBOL だと

IF (X EQ 1 OR 2)

みたいに書けませんでしたっけ?

# re: 比較演算式への妄想 2008/01/23 16:53 シャノン

文字列でも数値でもない場合は? っと。
任意の演算子 Hoge は、メソッド operator Hoge() に過ぎないと考えるならば、任意のメソッドが省略表記できてもいーじゃん? と。

> COBOL だと

COBOL なんぞ知らん!

# re: 比較演算式への妄想 2008/01/23 17:08 裏口

>IF (X EQ 1 OR 2)
>みたいに書けませんでしたっけ?

COBOLだと普通に書けます。
# AND,OR が混じっても可。優先順は AND>OR 括弧内優先
# NOTによる否定もあり なのでかなり柔軟でしたね。

タイトル
名前
Url
コメント