プログラマのための英文法(笑)


再びちょっとしたネタ記事。

皆さん英語は好きですか?僕は嫌いです。
英語の勉強は覚えるとかばっかりで理解を促してくれません。

こんな英文があります。

Reading is to the mind what food is to the body.
(たべものが体にとって大事なように読書も精神にとって大事である。)

いわゆる、A is to B what C is to D.の構文なんですが、
これをそのまま覚えるのって苦行ですよね。

苦行は嫌いなので、論理的に覚えたいと思います。

SVCM構文のルール:(例外はあるけど暫定的に)
1.SVCMを名詞相当句にするにはS|Cのうち、欠けている物を関係詞whatで補い前置する。
2.CとMはCが長くなると逆転しSVMCにしてもよい。
3.Cには名詞相当句が入る

ここで、
a is ** to b(bにとってaは**だ。)---(1)
c is ** to d(dにとってcは**だ。)---(2)
を考える。

ルール1により、(2)を名詞相当句にする。
what c is to d ---(3)
ルール3により、(1)のCに(3)を代入。
a is what c is to d to b. ---(4)
ルール2に(4)を変形
a is to b what c is to d.

とこんな感じのルールで動いています。

これをJavaScriptのプログラムにしてみると、

var SVCM=function(obj){
    this.S=(obj.S)?obj.S:"**";
    this.V=(obj.V)?obj.V:"**";
    this.C=(obj.C)?obj.C:"**";
    this.M=(obj.M)?obj.M:"";
    this.order=["S","V","C","M"];
    this.sentence=true;
};

SVCM.prototype={
    nominalize:function(where){
		this[where]="what";
		this.sentence=false;
		var ord=[where];
		for(var i=0;this.order.length-i>0;i++){
			var e=this.order[i];
			if(e!=where)ord.push(e);
		}
		this.order=ord;
		return this;
    },
    toString:function(){
		var ret=[];
		for(var i=0;this.order.length-i>0;i++){
			ret.push(this[this.order[i]]);
		}
		return ret.join(" ")+((this.sentence)?".":"");
    },
    inverse:function(){
    	var posC,posM;
		for(var i=0;this.order.length-i>0;i++){
			var e=this.order[i];
			if(e=="C"){	posC=i;}
			if(e=="M"){	posM=i;}
		}
		this.order[posC]="M";
		this.order[posM]="C";
		return this;
    }
}

var s1=new SVCM({S:"A",V:"is",M:"to B"});
log(s1);
var s2=new SVCM({S:"C",V:"is",M:"to D"});
log(s2);
s1.C=s2.nominalize("C");
log(s1);
log(s1.inverse());
	

これを少し、発展させて新ルールを追加しましょう。

SVCM構文のルール:(例外はあるけど暫定的に)
4.SVMC文を修飾語相当句にするにはwith SCMとする。

というルールを追加してみましょう。

SVCM.prototype.modifier=function(){
	if(this.sentence){
		this.sentence=false;
		this.P="with";
		var ord=["P"];
		for(var i=0;this.order.length-i>0;i++){
			var e=this.order[i];
			if(e!="V")ord.push(e);
		}
		this.order=ord;
		return this;
	}
	return false;
}
	

このルールによって、文全体を修飾語として扱うことができます。
すこし実験をして見ましょう。

log("--簡易テスト--");
var sen1=new SVCM({S:"A",V:"is",C:"happy"});
log(sen1);
log(sen1.modifier());
log("--He can't be alive with the earth what it is.--");

var e1=new SVCM({S:"it",V:"is"});
var e2=new SVCM({S:"He",V:"can't be",C:"alive"});
var e3=new SVCM({S:"the earth",V:"is"});
log(e1);log(e2);log(e3);
log(e1.nominalize("C"));
e3.C=e1;
log(e3);
log(e3.modifier());
e2.M=e3;
log(e2);
log("-(地球がこのような有様では、彼は生きてはいないだろう)-")
	

どうでしょうか。
3つの文が、要素を変形させて1つの文になっていくさまがわかると思います。

このように教えてくれれば、英語に苦手意識を持つ必要がなかったのに・・・><

« FizzBuzzはもう古い!世界のナベアツ問題。 – C言語で使用メモリをカウントする。 »

No Comments »

No comments yet.

Leave a comment

 

WP-Design: Vlad -- Powered by WordPress -- XHTML 1.0