連載:[完全版]究極のC#プログラミング

Chapter4 Findメソッド

川俣 晶
2009/09/14


 本記事は、(株)技術評論社が発行する書籍『[完全版]究極のC#プログラミング ― 新スタイルによる実践的コーディング』から、許可を得て転載しています。
 同書籍は、もともと本フォーラムにて連載していた『C# 2.0入門』、『C# 3.0入門』の記事を整理統合し、加筆、修正されたものです。

  手元でまとめて読みたい方は、ぜひ書店などにてお買い求めください。

 【注意】本記事は、書籍の内容を改変することなく、そのまま転載したものです。このため用字用語の統一ルールなどは@ITのそれとは一致しません。あらかじめご了承ください。

4.1 MATステートメントの思い出

 1978年に発売されたおそらく日本で最初*5のパーソナルコンピュータとなるNEC PC-8001には、N-BASICというBASIC言語が搭載されていた。これは本体に組み込まれたROMに焼き込まれたもので、当然、入れ替えるためにはROM交換を必要とした(実際に、バージョン1.0から1.1へのバージョンアップはROM販売という形で行われた)。

 さて、ROMという以上は書き換えができない。ならばいっさいの拡張性が拒絶されていたのかというと、そうではない。書き換え可能なRAM領域にジャンプしてから戻ってくるというコードが多く組み込まれていたのだ。これをフック(hook)という。RAM領域を書き換えてやれば、BASICのさまざまな処理を乗っ取って拡張することができた。

 また、拡張用の予約語として、特定の機能が割り当てられていないキーワードもいくつか用意されていた。たとえば、「TALK」のような名前のステートメントが予約語として用意されていた。これを見て「音声合成機能がオプションとして提供されるはずだ!」と勘違いした人も多かったようだが、おそらくこれは当時有力であった外部拡張バスのGP-IB(IEEE 488)の制御用に用意されたキーワードだったのだろう。GP-IBでは、通信用語としてtalk/listenというような言葉を使うためである。

 ほかの予約語としては、「MAT」というものがあった。

 これは、私がPC-8001を改造してカセットインターフェースを倍速化した際、それを活用するユーティリティ機能を起動するためのステートメントとして利用した。市販の倍速化回路は基板を追加してスイッチ切り替えで実現していたが、私の設計した回路はジャンパ線を6本追加するだけで、後はソフトの支援で切り替えを行う仕掛けになっていた。

 この自作MATコマンドは、「Monitor for Aki’s Tape system」の略として称していたのだが、もちろん本当は違う。TALKステートメントが音声合成ではなくGP-IB用だろう……と予測できるよりも確実に違う。これは間違いなく行列演算用に用意された予約語である。

 N-BASICでは最後まで出現しなかったが、世の中にある一部のBASIC言語には行列演算を行うためのMATステートメントが存在するものがある。MATは行列(Matrix)の略だろう。もちろん、実際には配列に対して作用する演算機能である。

 実例を少し検索してみたところ、次のような例が見つかった。

HP 3000 Manuals:HP Business BASIC/XL Reference Manual

 サンプルソースも掲載されているので、興味のある人は見てみるとよいだろう。つまり、「MAT A=B+C」のようなステートメントは、配列の個々の値ではなく、配列全体に対して作用する演算機能として存在したわけである。

 少なくとも1978年の時点で、単独の値ではなく、値の集まりに対して作用する演算は(安価なパソコンレベルでも)具体的な拡張の可能性として意識されていたわけである。

 単独の値ではなく、値の集まりに対して行われる演算機能は、明示的な繰り返し構文なしで複数の値に演算を行うことができる。それはソースコードの量と質を大きく変えてしまう可能性を持つ。

 そして、世界の広さを少しでもきちんと認識する者は、1978年当時であっても、そのような可能性を実際に意識していたであろう。しかし、実際にはN-BASIC用の行列演算拡張は発売されることはなく、“可能性”は幻のまま終わってしまった。

 ちなみに、このMATステートメントの話題は、前振りの余談ではなく、実は本章の結論に対する重要な伏線である。

*5 日立BASIC MASTERという説もあるが、筆者は違うと考えている。なぜなら、パソコンとは「箱に入った完成品」を指す言葉ではなく、曖昧な概念によって商品をカテゴライズする言葉でしかないからだ。つまり、パソコンと名乗ったものがパソコンである。PC-8001がパソコンである根拠は、商品に「Personal Computer」と書いてあったという事実にある。


 INDEX
  [完全版]究極のC#プログラミング
  Chapter4 Findメソッド
  1.4.1 MATステートメントの思い出
    2.4.2 ForEachメソッドのbreak問題
    3.4.3 ForEachだけではない繰り返しメソッド
    4.4.4 複数の結果がほしい場合
    5.4.5 偉大なる前進とは何か?
    6.4.6 そして、LINQへ続く/【Exercise】練習問題
 
インデックス・ページヘ  「[完全版]究極のC#プログラミング」


Insider.NET フォーラム 新着記事
  • 第2回 簡潔なコーディングのために (2017/7/26)
     ラムダ式で記述できるメンバの増加、throw式、out変数、タプルなど、C# 7には以前よりもコードを簡潔に記述できるような機能が導入されている
  • 第1回 Visual Studio Codeデバッグの基礎知識 (2017/7/21)
     Node.jsプログラムをデバッグしながら、Visual Studio Codeに統合されているデバッグ機能の基本の「キ」をマスターしよう
  • 第1回 明瞭なコーディングのために (2017/7/19)
     C# 7で追加された新機能の中から、「数値リテラル構文の改善」と「ローカル関数」を紹介する。これらは分かりやすいコードを記述するのに使える
  • Presentation Translator (2017/7/18)
     Presentation TranslatorはPowerPoint用のアドイン。プレゼンテーション時の字幕の付加や、多言語での質疑応答、スライドの翻訳を行える
@ITメールマガジン 新着情報やスタッフのコラムがメールで届きます(無料)

注目のテーマ

Insider.NET 記事ランキング

本日 月間