逆ポーランド記法計算機を作ってみた

  • 入力
    • 逆ポーランド記法で書いた四則演算
  • 出力
    • 計算結果

以下にコードを示す

#!/usr/bin/ruby
# 1行の逆ポーランド記法を突っ込むと
# 計算して結果を出力するプログラム
# 計算は、四則演算
print "input: "
queue = []
stack = []
queue = gets.split(" ").map do |i|
if i.to_i.to_s == i
i.to_i
else
i
end
end
while queue.length > 0
token = queue.shift
if token.class.name == "Fixnum"
# トークンがオペランドのとき
stack.push token
else
# トークンがオペレータのとき
if stack.length < 2
print "syntax error\n"
exit -1
end
op=stack.pop
if token == "+"
stack.push stack.pop + op
elsif token == "-"
stack.push stack.pop - op
elsif token == "*"
stack.push stack.pop * op
elsif token == "/"
stack.push stack.pop / op
end
end
end
# 入力トークン列の長さが0かつスタックの長さが1なら終了
if  stack.length == 1
print stack[0]
else
print "error"
end
print "\n"

トークンがオペレータのときの操作が泥臭い。もっとすっきり書けないかな?

あと、オペランドかオペレータかの判定も気持ち悪い。

言い出すとキリがないが、入力文字列の解析部分も気持ち悪い。

findコマンド

Linuxのfindコマンドはかなり奥が深い.

ふつうは

find 「ディレクトリ名」

とすることで,そのディレクトリ以下のディレクトリ,ファイルを再帰的に列挙できる.

今日知ったオプションは,-maxdepthと-name.

  • maxdepthというオプションを付けると,何階層下までディレクトリを降りていくかを指定できる.

また,-nameというオプションは,正規表現で出力すべきファイル名を指定できる.

なので,2階層下までのうちのjpgファイルを出力する場合,

find ./ -maxdepth 2 -name "*jpg$"

とすればいい.便利.

ほかにも -And や -Or というオプションがあり,他のオプションをAndやOrで組み合わせられるらしいけどまだ試してない.

VistaでAptanaStudioを使うとき

Vistaでは,一般ユーザにProgram FilesフォルダやAptanaフォルダへの書き込みor変更権限が与えられていない.この権限がないと,Aptanaの機能でアップデートなどを実行しようとしたときに,エラーになってしまう.

そこで,権限を与える.まず,Cドライブ中のAptanaフォルダを右クリックし,「セキュリティ」タブの真中らへんにある「編集」ボタンをクリック.そこで自分のユーザに権限を与える.

同様にして,Rubyのフォルダにもフルアクセス権限をつけないとgemがうまくいかなかった.

ミューパラ

中学・高校のころ毎日聴いてたラジオ.ABCラジオのミュージックパラダイス.

久しぶりに聴いてみたら担当アナウンサーが全然違う!(聴いてた頃から10年くらい経ってるので当然か・・・)と思ってウェブサイトを見てみたら,「ガッチ&じゅんじゅん&ウラウラ&ジェイミー&サッキーが卒業します!」という記事があった.今年の3月の記事らしい.残念.

GNUなプログラムを

GNUアプリケーション的なプログラムを作りたい.ここでは,

  1. ソースコードを取ってきて
  2. 展開して
  3. ./configure して
  4. make して
  5. make install する

みたいなやつのことを言ってる.これを実現するには, automake と autoconf が必要らしい.ということで,いろいろ調べながら公開メモの方にまとめ中.