diff --git a/keisan7.rb b/keisan7.rb index ee351da..c37e4c5 100755 --- a/keisan7.rb +++ b/keisan7.rb @@ -1,12 +1,10 @@ -#!/usr/bin/env ruby -# -*- coding: utf-8 -*- require "curses" def keisan(shiki, ichi=0, ans=0.0) - suuji=[]; enzan=[]; yuusen={'+'=>1,'-'=>1,'*'=>2,'/'=>2} + suuji,enzan = [], [] + yuusen = {'+'=>1,'-'=>1,'*'=>2,'/'=>2 } tekiyou = ->{ - b=suuji.pop; a=suuji.pop; e=enzan.pop - suuji << (e=='+' ? a+b : e=='-' ? a-b : e=='*' ? a*b : a/b) - } + b, a, e, = suuji.pop, suuji.pop, enzan.pop + suuji << (e=='+' ? a+b : e=='-' ? a-b : e=='*' ? a*b : a/b)} yomu_atai = lambda do ichi += 1 while shiki[ichi]==' ' raise "式の途中で終わりました" unless shiki[ichi] @@ -50,20 +48,25 @@ tekiyou.call while enzan.any? [suuji[0], ichi] end - include Curses init_screen cbreak noecho curs_set(0) -nyuryoku=""; messeji="Enter=計算 / BS=削除 / Ctrl+L=クリア / q=終了"; kekka=""; ans=0.0 +nyuryoku="" +messeji="Enter=計算 / BS=削除 / Ctrl+L=クリア / q=終了" +kekka, ans ="", 0.0 begin loop do clear - setpos(0,0); addstr("curses電卓(+-*/() 小数)"[0,cols-1]) - setpos(1,0); addstr(messeji[0,cols-1]) - setpos(2,0); addstr(("> "+nyuryoku)[0,cols-1]) - setpos(3,0); addstr(("= "+kekka)[0,cols-1]) + setpos(0,0) + addstr("curses電卓(+-*/() 小数)"[0,cols-1]) + setpos(1,0) + addstr(messeji[0,cols-1]) + setpos(2,0) + addstr(("> "+nyuryoku)[0,cols-1]) + setpos(3,0) + addstr(("= "+kekka)[0,cols-1]) key=getch case key when 'q','Q' then break @@ -76,12 +79,12 @@ owari += 1 while shiki[owari]==' ' raise "式の後ろに余計な文字があります" if owari < shiki.length ans = kotae - kekka = kotae.to_s; nyuryoku=""; messeji="計算しました(ans=#{ans})" + kekka, nyuryoku, messeji = kotae.to_s, "", "計算しました (ans=#{ans} )" rescue => e - kekka = ""; nyuryoku=""; messeji="エラー: #{e.message}" + kekka, nyuryoku, messeji = "", "", "エラー: #{e.message}" end when 12 - nyuryoku=""; kekka=""; messeji="クリアしました" + nyuryoku, kekka, messeji = "", "", "クリアしました" when KEY_BACKSPACE,127,8 nyuryoku = nyuryoku[0...-1] when Integer