2009/11/27

今までどのくらいプログラミング言語を触ってきたか

 

いまさら掘り返してみる。

(3秒で飽きたものも含め)

 

  • Delphi
  • C
  • JavaScript
    • JScript
    • Ejacs
    • Rhino
  • WSH
  • VB
    • VB6
    • VBA
  • SQL
  • C#
    • 1.1~3.5
  • F#
  • PowerShell
  • Ruby
  • PHP
  • Scheme
    • PLT
    • Gauche
    • IronScheme
  • Emacs Lisp
  • R
  • Common Lisp
  • PostScript
    • GhostScript
  • Erlang
  • Prolog
    • SWI-Prolog

 

含むならこの辺も

  • HTML
  • XML
  • XSLT
  • XAML

 

わりと長くやったもの

  • JavaScript
  • SQL
  • C#
  • Scheme
  • PostScript

 

JavaScriptはコアJavaScriptと言えば良いのか?DOMとかブラウザとか抜きで、関数型っぽいところとプロトタイプベースのオブジェクト指向が面白そうでやってみた。サイ本の後半には興味が持てなかった。Schemeで書いたコードをJSで書いてみたりというのも楽しんだ。Win環境で仕事の補助的な単純処理バッチも結構書いた(JScript)。

SQLとC#は仕事で2年半くらい結構みっちりやった。行数にして合わせて数十万行くらいは書いたと思う(一番書いた時で3万行/月くらい)。そのうち2年くらいは1.1だけど(笑)笑えない。MCTSも2.0なら3つとも取れた。MCPDは落ちたまま再挑戦してない。そのうちMCPD取って3.5にアップグレードしたいなーなどと思っていたが、今となってはどうだろうか。

Schemeはここ1年くらい結構継続してやってるけどずっと初級者。PostScriptはつい最近2ヶ月ほど入門的なことを。

ごく最近はPrologの入門的なことをだらだらと少々・・・。

 

将来設計はなし。興味が湧いた言語にただ手を出してるだけ。仕事はドロップアウト中。「自分探しの旅(笑)」とかに似たような現実逃避中なのかな。しかし結構充実している。たぶんやりたい放題だから。昼寝してやりたいことやって好きな時に自由にプログラミングしてるからかな。時間的余裕がたっぷりあるからなのかも。こういうスタイルで生活費でも稼げればラッキーなんだけどなー。

 

お金を稼げるプログラマになりたいな。それも"頑張り次第"とか"書いたら書いただけ"とか"仕事をさばいた分だけ、さばけばさばくほど"なんていうんじゃなくて、もっと怠惰にプログラマブルに。その方がプログラマっぽい。

 

華麗に脱線。

2009/11/21

Prolog 数値計算、述語

% X is 1 + 2 + 3.
% X = 6.

% X is 1 + 2, X is 3 + 4.
% false.

 

square(X, Y) :-
    Y is X * X.
/*
square(2, Y).
Y = 4.
square(2, 4).
true.
square(2, 10).
false.
*/

/*
  predicate
  >
  <
  >=
  <=
  =\= 等しくない
  =:= 等しい
*/

 

Prolog 空を飛ぶのは飛行機もしくはスーパーマン

fly(X) :-
    airplane(X).
fly(X) :-
    superman(X).

airplane(jet_plane).
airplane(helicopter).

superman(taro).

/*
fly(jet_plane).
true.

fly(taro).
true.

fly(Y).
Y = jet_plane ;
Y = helicopter ;
Y = taro.
*/

 

Prolog isono家

% 節?
male(namihei).
male(masuo).
male(katuo).
male(tara).
/*
male(X).
X = namihei ;
X = masuo ;
X = katuo ;
X = tara.
*/

female(fune).
female(sazae).
female(wakame).
/*
female(X).
X = fune ;
X = sazae ;
X = wakame.
*/

father_of(namihei, sazae).
father_of(namihei, katuo).
father_of(namihei, wakame).
father_of(masuo, tara).
/*
father_of(X, Y).
X = namihei,
Y = sazae ;
X = namihei,
Y = katuo ;
X = namihei,
Y = wakame ;
X = masuo,
Y = tara.
*/

 

mother_of(fune, sazae).
mother_of(fune, katuo).
mother_of(fune, wakame).
mother_of(sazae, tara).
/*
mother_of(X, Y).
X = fune,
Y = sazae ;
X = fune,
Y = katuo ;
X = fune,
Y = wakame ;
X = sazae,
Y = tara.
*/

 

% XはYの親である
% XがYの父親であるか、XがYの母親である
parent_of(X, Y) :-
    father_of(X, Y).
parent_of(X, Y) :-
    mother_of(X, Y).
/*
parent_of(X, sazae).
X = namihei ;
X = fune ;
false.

parent_of(X, Y).
X = namihei,
Y = sazae ;
X = namihei,
Y = katuo ;
X = namihei,
Y = wakame ;
X = masuo,
Y = tara ;
X = fune,
Y = sazae ;
X = fune,
Y = katuo ;
X = fune,
Y = wakame ;
X = sazae,
Y = tara.
*/

 

% XはYの息子である
% YはXの親であり、かつX
は男性である
suns_of(X, Y) :-
    parent_of(Y, X),
    male(X).
/*
suns_of(X, sazae).
X = tara.

suns_of(X, fune).
X = katuo ;
false.
*/

 

% XはYの娘である
% YはXの親であり、かつXは女性である
daughter_of(X, Y) :-
    parent_of(Y, X),
    female(X).
/*
daughter_of(X, Y).
X = sazae,
Y = namihei ;
X = wakame,
Y = namihei ;
X = sazae,
Y = fune ;
X = wakame,
Y = fune ;
false.
*/

 

% XはYの祖父である
% ZはYの親であり、XはZの父である
grandfather_of(X, Y) :-
    parent_of(Z, Y),
    father_of(X, Z).
/*
grandfather_of(X, Y).
X = namihei,
Y = tara ;
false.
*/

/*
grandfather_of(X, Y).
X = namihei,
Y = tara
*/

 

% XはYの祖母である
% ZはYの親であり、XはZの母
grandmother_of(X, Y) :-
    parent_of(Z, Y),
    mother_of(X, Z).

/*
grandmother_of(X, Y).
X = fune,
Y = tara
*/

 

Prolog 階乗

% 階乗
fact(0, 1).
fact(X, Y) :-
    X > 0,
    X1 is X - 1,
    fact(X1, Y1),
    Y is X * Y1.
fact(5, 120).


% ?- fact(5, Y).
% 120

% 外部ファイルの読み込み
% ['c:/program files/pl/demo/likes.pl'].


% pwd : カレントフォルダ
% ls : カレントフォルダ内のファイルを表示

% comment
/*
  comments
*/

 

Prolog ソクラテスは人間である

% socrates
human(socrates).

mortal(X) :-
    human(X).

/*

mortal(Y).
Y = socrates.

human(Y).
Y = socrates.

human(socrates).
true.

mortal(socrates).
true.

*/

% 終了は
% halt.

*mortal : 死ぬ運命にある、死を免れない

Prolog PDF 他

(PDF)Prolog入門

(PDF)Prologue: Prologを動かすには

Prologプログラミング: 再帰的プログラミング

Prolog準備

お気楽 Prolog プログラミング入門
Prolog Programming

Prolog演習

Prolog演習

Some Coding Guidelines for Prolog

Prolog(Web Console)

Guide to Prolog Programming

Prolog Programming A First Course

prolog :- tutorial

Learn Prolog Now!

The Prolog Dictionary

Prolog Tutorial




Erlang Hello world!, factorial, fibonacci

Hello world!

-module(hello).
-export([hello/0]).

hello () ->
    io : fwrite("Hello, world!~n", []).
% hello:hello().
% Hello, world!
% ok

factorial

-module(fact).
-export([fact/1]).

fact(1) ->
    1;
fact(N) ->
    N * fact(N-1).

% fact:fact(5).
% 120

fibonacci

% 一般的にファイル名と同じ名称を指定する
-module(fib).
% モジュール外から使用する関数とその引数の数を記述
-export([fib/1]).
% 全ての関数をエクスポートするには
% -compile(export_all).
% 定数定義、レコード定義のインクルード
% -include_lib("hoge.hrl").

fib(1) ->
    1;
fib(2) ->
    1;
fib(N) ->
    fib(N-1) + fib(N-2).

 

C-c C-k コンパイル

Prolog 階乗

% 階乗
fact(0, 1).
fact(X, Y) :-
    X > 0,
    X1 is X - 1,
    fact(X1, Y1),
    Y is X * Y1.
fact(5, 120).


% ?- fact(5, Y).
% 120

% 外部ファイルの読み込み
% ['c:/program files/pl/demo/likes.pl'].

% ; : 選択(「もしくは」のようなニュアンス?)
% pwd : カレントフォルダ
% ls : カレントフォルダ内のファイルを表示

 

% comment
/*
  comments
*/