2010年12月14日火曜日

D言語で簡単な計算プログラムを書いた 2

まだ色々気になるところがあるけど、ネタも無いしこれで完成ってことで。
import std.conv : to; import std.math : ceil,pow; import std.stdio : writefln,readln; import std.string : split,chomp; import std.regexp : RegExp,find; import std.algorithm : filter; void main () { double sum; int symbol; string arg; int[string] symbols = ["+":0,"-":1,"*":2,"/":3,"%":4,"^":5]; RegExp number = new RegExp(r"^[\+\-]?\d+(\.\d+)?$"); INPUT: while ((sum = (symbol = !(arg = chomp(readln())).length)) == 0) { foreach (string part; filter!("a.length")(split(arg," "))) { if (symbol == -1 && part in symbols) { symbol = symbols[part]; } else if (symbol != -1 && !number.find(part)) { sum = calculate(symbol,sum,to!(double)(part)); symbol = -1; } else { error(symbol,part); continue INPUT; } } writefln("= %s\n",sum != ceil(sum) || cast(double)(long.max) < sum || cast(double)(long.min) > sum ? to!(string)(sum) : to!(string)(cast(long)(sum))); } } double calculate (int symbol,double x,double y) { return !y && (symbol == 3 || symbol == 4) ? symbol == 3 ? 0 : x : symbol == 0 ? x + y : symbol == 1 ? x - y : symbol == 2 ? x * y : symbol == 3 ? x / y : symbol == 4 ? x % y : pow(x,y); } void error (int symbol,string part) { writefln((symbol == -1 ? "Symbol" : "Numeric") ~ " Error: %s\n",part); }
こんな面倒臭がりな性格が丸見えなPerlっぽいコードを受け入れてくれるD言語はネ申言語。
あなたがC言語を大して知らなくても、PerlやPHP等の超高級言語をある程度使いこなせれば手軽に書けます。さぁ Let's try!

プログラミング言語 D
D言語基礎文法最速マスター

0 件のコメント:

コメントを投稿