ソフトウェアエンジニアのブログ

暇つぶしに書いてます。他に技術的なことは[http://qiita.com/nsas454]に書いてますのでそちらも見てください。

JavaScriptでSchemeのcons,car,cdrを実装してみた。

今回、SchemeのconsとcarとcdrをJavaScriptで実装してみました。実装の方法としては、いろんな方法が書けると思いますが、クロージャーを使った実装とプロトタイプを使った実装の2種類を書いてみました。とりあえず参考までにコードを晒しておきます。状況により、エラーチェックも必要でしょうけど、今のところそこまで考慮していません。近いうちに遅延評価についてもJavaScriptで記述してみようと思います。

クロージャーを使った実装方法

consをクロージャーとして実装しています。JavaScriptらしいコードになりましたが、ややオーバースペックな感じが否めません。

function cons(x, y) {
  return function(m) {
           return m(x, y);
                 };
}

function car(z) {
  return z(function(p, q){return p;});
}

function cdr(z) {
  return z(function(p, q){return q;}); }

プロトタイプを使った実装方法

cellを作ってからconsするイメージをそのまま使用しています。
通常使う分で、性能を考慮するとクロージャーを使った実装は少しオーバースペックなので、通常はプロトタイプを使った実装の方を利用するようにします。クロージャーを使った実装はどのくらい性能が悪くなるかについては、実験していないので不明です。無責任ですいません。。

function cell(){
    this.car = null;
    this.cdr = null;
}

function cons(x, y){
   var cells = new cell();
   cells.car = x;
   cells.cdr = y;
   return cells;
}

function car(x){ 
   return x.car;
}

function cdr(x){
   return x.cdr;
}

久しぶりにJavaScript書いてみたらreturnに戸惑ってしまいました。クロージャーなんかは、Schemeの方が綺麗に書けて気持ちいいな

今年の反省と思い出

今年も残るところ少しとなったので反省と思い出を綴っていきたいと思います。
一年はあっとゆうまですね。毎年少しづつでも進んでいけるようにしていきたいです。

今年は何事もトラブルなく順調に言っているように感じてます。
来年以降が勝負の年になりそうです。 

来年の目標もそろそろ考えていきたいと思います。
一歩づつ確実に前進できるようにしていきたいです。 

 

私の中での重大なニュース

大学院に入学
博士課程前期に進学しました。 

会社を設立
大学でベンチャー企業を立ち上げました。

車を買い換えた
車の車検を契機に車を新しくしました。

 

 

年功序列制度

日本企業でも最近は年功序列の制度はなくなりつつあり、若い人が会社の中心となって活躍する場は増えてきているように感じます。私も長い間年功序列の会社と関わった経験がありません。年功序列の制度が決して悪いわけではないのでしょうが、私はあまりいいとは思っていません。実力ある人は年齢や経験に関係なくどんどん活躍して欲しいです。経験がないからこそ生まれてくるアイデアもたくさんあるはずです。私も最近は経験が増えてきたのか、どうも色々考えて行動できないパターンが増えたように感じます。数年前は怖いもの知らずだったのですけど。。

で、最近この年功序列制度に遭遇しました。
大学の教育現場です。スポーツの世界でもなくなりつつあるこの習慣が、なんと、大学の教育現場には、いまだにかなり色濃く残っています。教授や准教授、助教など、明らかに序列ができています。いまや天然記念物みたいなこの年功序列が教育の現場にはまだ現役バリバリです。新鮮味はありますが、やっぱりこの制度はうざいです。学生の間でも1年はとか2年はとか在籍期間が長いだけで下の学年は雑用をやらされるのが当たり前になっています。

学年に関係なく出来る奴は研究やって、できない奴や、できのわるいやつは、雑用なりなんなりをやればいいと思いのです。それでこそ組織の調和が取れるのではないでしょうか? 学年が上だから雑用しなくていいとはとんだ思い違いです。学年があがっても研究やっていない人間は雑用をやり、もしそれが嫌なら、がんばって研究すればいいし、またはやめればいいと思います。研究しない学生は正直邪魔でしかないのですから。。

ものづくりについて

先日、パナソニックが7000千億の赤字のニュースが流れていました。日本のものづくりメーカ各社そろって大赤字を計上しています。円高の影響もあるんでしょうが、ひどい結果です。一方アメリカの方をみてみると、数年前にGMが倒産したとのニュースも流れていました。どちらにも共通することは「ものづくり」です。とくに製造ですね。このことから、先進国では「ものづくり」するんじゃない!!と神のお告げなのかもしれません。

対照的にアップルは好成績です。
この会社も一見すると「ものづくり」をしているように感じるのですが、少し事情が違います。
ものはつくっていますが、新しいものをつくっています。
常にあたらしいもの、魅力的なものを創造する。
さらに製品は他社に作らせる。ようするに人を使って稼ぐ会社です。

日本の電気メーカはサムソンやLGなどメーカと戦っている場合ではないのではないでしょうか?
もうすこしアップルをみらなってビジネスモデルを見なおしてもらいたいもんです。
今の日本メーカに、そんなこと考えられる賢い社員が到底いるようにおもえませんがw

最近日銀の金融政策にも少し不満ありあり!!
いまのようなデフレが続いているにもかかわらず、なぜお札を印刷しないのでしょう?
マネーサプライをふやしてインフレにすればすぐに今のデフレの状態から脱却できるのに?
経済学の専門でない人間は間違いなくそう考えるでしょう。
アメリカやヨーロッパは意図的にインフレを起こすようにしているのに、日本だけ取り残されてしまって今、激しい円高です。このままでは日本が崩壊するのは目に見えているのではないか?

 

防衛庁長官の件について

防衛庁長官に対する質問とかいいながら、クイズだしてどうなってんねんw
田中さんももう少ししっかりしてもらいたいわ

参院予算委員会集中審議で途中退席してコーヒー飲んでたとかのニュースも流れてたけど、あきれるな。やる気なさすぎやわ。

議員さん、しっかりしてください。

7つの言語7つの世界

7つの言語と7つの世界の言葉に惹かれて書店で購入しました。世の中には多くの言語が存在しています。メジャーな言語からマイナーな言語まで、たくさん存在しています。通常のプログラマであれば得意とする言語一つぐらいあればいいのでしょうが、職業柄いろんな言語に興味を持ってしまいます。いわゆる言語おたくなんでしょうね。その言語ひとつひとつに込められた設計者の思いというのをしってみたいと思ってます。どんな言語でも設計者の思いはあるものです。
この本は深くまではいっていませんが、7つの言語の特徴を簡単にまとめた本です。プログラムが好きな方なら楽しめると思います。

7つの言語 7つの世界

7つの言語 7つの世界

JavaScriptでXMLHttpRequestを書いてみる

Ajaxアプリケーションを書く場合でも最近はライブライを使って記述することが多いと思います。したがって、直接JavaScriptXMLHttpRequestを記述することはまずないでしょう。私も直接書いたことはありません。Jqueryを使うか、Google Clouserを普段は使います。そうはいっても、直接JavaScriptでどうやってXMLHttpRequest書いたらいいのか知っておくのも大切だと思うので一般的な書き方をメモしておきます。
urlには通信先のURLを記述します。
readyStateの4が帰ってきたら通信が終了なので、そこでサーバからのレスポンスをstatusでチェックして条件に応じて処理をするようになります。
”読み込み中...”みたいな表記をさせたい場合は、readyStateが4になるまでの処理に追加しておけば大丈夫です。

以外に簡単ですね。

var req = new XMLHttpRequest();
req.onreadystatechange = function(){
  swich(req.readyState){
      case 1://open
      case 2://Sent
      case 3://Receiving
          break;
      case 4://Loaded  
         //xhr.status === 200
    }
};
req.open(‘GET’,‘url’,true)
req.sent(null);


Jqueryはもっと記述を簡単にできます。

$.ajax({
    url: '取得するXMLファイル',
    dataType: 'xml',
    success : function(data){
        //取得したファイルに対する処理
    }
})

機能についてはJavaScriptで記述したものと全く同じです。
Jqueryみたいなシンタックスシュガーを使うとコーディングが楽になりますね。