yamicha.com's Blog - Presented by yamicha.com
Blog yamicha.com's Blog - 2018/09 の記事
[1] [2] [3] [4] [5] [6] [7] [8] [9] [10] [11] [12] [13] [14] [15] [16] [17] [18] [19] [20] [21] [22] [23] [24] [25] [26] [27] [28] [29] [30]

yamicha.com's Blog
 諸事情により、現在更新休止中。ご了承ください。もし今後ブログを再開することがあるとすれば、その際にはこのブログスクリプトではなく、新しく開発したものによるかもしれません。
 当ブログ管理者についてはこちらをご参照。
開発魔法(737)
社会問題(733)
お知らせ(11)
質問・バトン回答(15)
ゲスト出演(8)
経済・知的財産(150)
ゲーム開発(182)
[Ada] 勝手に補足
- Note
- 金配りの次の一手


- Endless Ultimate Diary
- 銃世界

漢字バトン
- うるる雑記帳
- 漢字接力棒

ツキアイゲノムバトン
- ブログ@うにうに画像倉庫
- あぶ内閣

縺イ縺セ縺、縺カ縺励ヰ繝医Φ
- 月夜のボヤキ
- 騎士サーラバトン
パスワードを使う
名無し (2012/02/27)


開発者解放裁判
yamicha.com (2010/03/14)
Winnyに関しては、私も「純白」とまでは考えておりませんし、使用し..

開発者解放裁判
通りすがり (2010/03/08)
winnyに関しては「ダウンロードソフト板」なんてところを拠点に開発..

新型インフルエンザの恐怖
いげ太 (2009/11/03)
> C#などの「int Some(int , int)」は、F#では「(int * int) ->..

時効に関する思考
yamicha.com (2009/08/31)
>いげ太さんコメントありがとうございます。手元にドキュメントが少..
Homepage
Blog Top
Normal View
List View
Search
Calendar
Comment List
Trackback List
Blog RSS
Send Trackback
Phone Mode
Administrator
yamicha.com
Blog
るううるる。
Source
法令データ提供システム
FindLaw
Development
Java2 Platform SE 6
Java EE 6 API
MySQL Developer Zone
PHP Reference
MSDN Library
Ada Reference Manual
Objective Caml
Python Documentation
Erlang
Prolog Documents
無利子非課税国債の次の一手
2009/03/22(Sun)04:15:44
 相続税の課税を回避できる「無利子非課税国債」の上、さらには贈与税の軽減まで検討しているらしい自民党・与謝野氏。相続税の回避が金持ち優遇であるのは疑いようもありませんが、贈与税に関しては必ずしもそうであるとは言い切れない部分もあり、金持ち優遇か否かが気になっていたのですが、どうやらこの贈与税減税も金持ち優遇措置のようです。
 まずは贈与税について述べておきましょう。贈与税はその名の通り贈与された財物に対して課される税で、相続税法第二章第二節で定められています。計算は年区切りで行い、基礎控除として60万円が控除される他、常識的な額の生活費・教育費などには課税されず、同法や特別措置法などで様々な減免・控除規定が設けられています。
 相続税同様、贈与税も累進性が高い課税方法となっており、金額に応じて税率が違います。第二十一条の七の表より引用します。

二百万円以下の金額 百分の十
二百万円を超え三百万円以下の金額 百分の十五
三百万円を超え四百万円以下の金額 百分の二十
四百万円を超え六百万円以下の金額 百分の三十
六百万円を超え千万円以下の金額 百分の四十
千万円を超える金額 百分の五十

 まず贈与を受けた額から控除分を減算します。その後、200万円以下の部分には10%、200万円超で300万円以下の部分には15%、300万円超で400万円以下の部分には20%といった具合に加算を行い、それを合計した額が税額となります。
 仮に控除額を基礎控除のみの60万円とするなら、100万円の贈与には4万円、300万円の贈与には26万円、500万円なら67万円、2000万円なら745万円と、金額が増えれば税額も大幅に上がります。控除額が最低であっても6000万円が最低ラインとなる相続税と違い、贈与税はある程度の金額にも課税されますので、相続税よりは一般の人にも縁のある税といえます。ただし、最大税率となる1000万円以上の部分ともなると、1年に少なくとも1060万円の贈与が必要となります。ここまでの額になると、多くの人には縁のないものと考えられます。
 また、相続税の計算を行う際には、最近3年間に贈与を受けた分も相続財産に算入して計算する規定となっていますが、3年以上前の贈与分には相続税は課されません。したがって、相続税がかかるほどの財産を持っている人は、生前の贈与によって無税で、あるいは最低限の税率で資産を譲渡しようとする場合があるようです。特に、相続税の控除を差し引いてもなお3億円以上もの資産がある場合、1000万円の贈与であれば税は251万円となり、500万円にもなる相続税に比べて半額を回避できます。これらの点からして、贈与税の控除額の拡大、あるいは税率の軽減は、金持ちにとっては利益のあるものといえるでしょう。一方、相続しても相続税がかからない程度の資産のみを持つ一般的な人であれば、多額の生前贈与よりも相続を受ける方が有利であるため、家を買うなどまとまった費用を必要とする場合を除き、あえて多額の贈与を用いる必要性は低いといえます。
 無利子非課税国債の推進派は、1500兆円の資産のうちの大部分を60歳以上の人が持っていることを理由とし、それを借り上げて必要な人に行き渡らせるのが導入の目的であると説明しますが、贈与税減税についても似通った説明がなされています。すなわち、60歳以上が握っている多額の資産を現役世代に譲り渡しやすくする環境を整え、若い人がそれを消費に回せば消費の拡大が期待できるというのです。言うまでもありませんが、多額の税がかかるほどの資産を所有している人は一部に過ぎず、その一部以外の人の資産の贈与が容易になったとしても大した効果は期待できませんので、目的が庶民の負担軽減でないのは明らかです。
 まず最初に、庶民の負担軽減のための贈与税減税と、金持ち優遇のための減税の違いを記しておきましょう。庶民の負担軽減にしても、庶民の中でもある程度裕福な人だけが対象となりますので、必ずしも「弱者」救済とはいえない側面も持ち合わせているのですが、総合的にはおおむね中所得者層の負担軽減と考えられます。
 中でも有名なのは、住宅購入費用の贈与税減免規定でしょう。これは親などから住宅購入費用の補助を受けた場合に適用されるもので、ある程度の金額を減免する機能を持っています。この制度によって庶民は住宅を購入しやすくなり、富の還流をも実現できます。無論、これは減免手法の一例に過ぎず、新たな規定の導入が検討されたりもしているようですが、ほとんどの場合は金額や用途に条件を設け、主に中所得者層の負担を軽減する制度となっています。
 金持ち優遇制度の場合は、これとは全く違った仕組みとなります。仮に何年かの間に1000万円までの金額への課税を減免するのであれば、庶民が3000万円の家を購入するのには有用ですが、金持ちが100億円の豪邸を購入する場合にはほとんど役に立ちません。100億というのはさすがに大げさにしても、一部の金持ち高齢者に集中した資産を現役世代へと還流するなら、上限額などの条件にはそれなりの設定が必要です。すなわち、それは庶民救済とは全く別個の仕組みでなければなりません。一口に贈与税減税とはいっても、両者には大きな差が存在するため、内容が分からない限りは賛成とも反対ともいえない理由はここにあります。いずれにしても「弱者」救済ではない以上、ある程度は導入に慎重であるべきですが、庶民救済のための減税であれば導入するのも手です。
 しかしながら、導入派の主張を見る限り、現在検討されている贈与税の減税は、どうやら金持ち優遇としての減税のようです。仮に無利子非課税国債が導入され、贈与税減免規定まで導入されれば、金持ちは資産を対象者に丸々相続・贈与できるようになります。主張者の意図によれば、無利子非課税国債では多額の個人資産を国が預かって弱者救済に使用し、また贈与税減免や無利子非課税国債で手にした財産を現役世代が消費に回せば、弱者を救済できる上に消費拡大も見込めるとの算段のようですが、一体何をどう考えればそこまで都合の良い答えが出てくるのでしょうか
 まず贈与によって60歳以上から現役世代へと資産を回し、現役世代がそれを使えば消費拡大がなされるなどと主張されていますが、いくら金持ちでもそのような無計画な散財を行うでしょうか。現役世代に財産が移ったからといって、それが使用される保証はどこにもありません。後先考えずに使用する人間もいないとは言い切れませんが、それでは効果は限定的に終わります。
 そして、もし期待に反して散財が行われなければ、相続税や贈与税の対象となっていたはずの財産が、現役世代の一部の金持ちの元へと丸ごと移されるのです。これでは封建制と一体何が違うのでしょうか。そうなれば、富の分配機能は完全に麻痺し、格差はさらに拡大し、弱者救済どころではなくなります。封建制のどこが消費拡大につながるのか、私には全く理解できません。
 これが単なる財産の移し変えに終わらぬよう、例えば「不動産の購入時にのみ減免される」といった条件をつける方法も考えられますが、金持ち相手に上手く機能するとは限りません。これが庶民向けの減税であるならともかく、金持ち対象の減税にそのような小細工をしたとしても、流動資産が不動産に変わって丸々移されるだけです。したがって、条件付きにしたとしても効果があるとは限らないといえるでしょう。また、もし条件の効果がある程度現れたとしても、富の分配機能が損なわれる事実に変わりはありません。
 まだ案の詳細がはっきりしない以上、この時点ではこれ以上立ち入って論じるのは困難ですが、建前からすれば金持ちに有利な案が予想されます。相続税を免除して財産をすべて現役世代に丸ごと移せるようにし、しかも金持ちの子息が散財することを祈りつつ贈与税を減免するのと、相続税及び贈与税をしっかり取り立てて弱者に対して使うのでは、どちらの方が弱者救済かつ資産の還流が可能でしょうか。
 アインシュタインの「宇宙定数」のような理屈で無理やり結論を導き出したところで、効果が発揮できるわけがありません。何か深い考えによるのであれば、それを国民に示すのは当然です。もし無利子非課税国債や贈与税軽減が導入される運びとなったら、与謝野氏らにはしっかりお答え願いたいところです。また、民主党にも賛成派と慎重派がいるようですが、少なくとも自民党がこれを出してくる段階で、あるいは総選挙の前までには、党としてのスタンスを明確にすべきです。

 今回はひとまずoption型について。これは前回に使用した「maybe」と同等の機能を持つ標準の型です。すなわち、C#のint?などに相当する型で、nullに当たる値としてNoneを、値がある場合にはSomeを使用します。
 これについては、OCamlチュートリアルの解説が非常に秀逸です。例えばJavaの標準ライブラリを見ても、String.indexOf()などでデータが見つからなければ-1を返してきます。仮に見つからないからといって例外を投げてきたり、あるいはIntegerを使ってnullを返してきたりする実装となっていれば、非難が集中したであろうことは想像に難くありませんので、現実的には最適なやり方とみられますが、突き詰めると確かに少々変です。Adaでこれを実装してPositive型を返そうとすると、見つからない場合は例外を投げる羽目になる、などとお遊びを書いていると、再び苦言のConstraint_Errorのraiseがありそうです。やむを得ませんので、Adaに関しては次なるネタも用意していたのですが、下手なことを書くよりマシですし、むやみにお遊びを書けないのも苦痛ですから、当面AdaとOCamlは見送りましょう(OCamlに関しては、ひとまず前回の「maybe」の標準版ともいえるoptionまでは必要でしょうから、そこまでは記しておきます)。ただでさえ開発・非開発問わず難しいことが多すぎ、脳が(末尾でない)再帰を繰り返しているのに、平行して牽強付会の余地のない厳密な文章を書いたり、例外をキャッチして対応するのは、ランデヴーのできない私には不可能です。
 上記ページでは年齢の統計に使用する例が述べられていますが、確かに統計の際に「-1」のような特殊なデータがあると邪魔です。とはいえ、うっかり-1を普通に演算してしまわないように気をつければ、以下のような方法も一応取れます。
(* 平均年齢を算出するプログラム *)
type person = {
	name : string;
	age : int
};;

let avg source = 
	let fs = (List.filter ((!=) (-1)) (List.map (fun a -> a.age) source))
	in (float (List.fold_left (+) 0 fs)) /. (float (List.length fs));;

Printf.printf "平均年齢:%f"
	(avg [{name = "Larry Wall"; age = 55};
	{name = "Taro Aso"; age = 69};
	{name = "Ada Lovelace"; age = 194};
	{name = "Leonhard Euler"; age = 302};
	{name = "Xiu Liu"; age = 2015};
	{name = "Cunobelinus"; age = -1};
	{name = "Hannibal Barca"; age = 2256}]);;
 平均年齢815歳なるすさまじい結果が得られます。
 ただし、上記のページではうっかり演算してしまう危険性について述べられており、このような場合は-1を使うべきではないようです。参考までに、SQLではこうなります。
CREATE TABLE age_test(name VARCHAR(32) , age INT);

INSERT INTO age_test VALUES('Larry Wall' , 55) , ('Taro Aso' , 69) ,
('Ada Lovelace' , 194) , ('Leonhard Euler' , 302) ,
('Xiu Liu' , 2015) , ('Cunobelinus' , NULL) , ('Hannibal Barca' , 2256);

SELECT AVG(age) FROM age_test;
 SQLの統計関数は、NULLがあると自動的に無視してくれます。
 SQLでNULLを用いるのと同様に、OCamlでもoptionを使った方が確かに安全でしょう。先のレコードをoptionで書き直すと、以下のようになります。
type person = {
	name : string;
	age : int option
};;
 後は年齢が分かっているならSome、分からないならNoneを使うだけです。
(* 分かる場合 *)
{name = "Anonymous"; age = Some 30}

(* 分からない場合 *)
{name = "Anonymous"; age = None}
 後はパターンマッチで受け取るなり、お好みの方法で統計データを得るのみです。例えば「年齢不詳の人」を表示するには、以下のようになります。
type person = {
	name : string;
	age : int option
};;

List.iter (fun p -> Printf.printf "%s\n" p.name)
	(List.filter (fun p -> p.age == None)
		[{name = "Leonhard"; age = Some 302};
		{name = "Grey"; age = Some 70};
		{name = "Venus"; age = None};
		{name = "Mint"; age = None}]);;
 OCamlの第一部はここまでとして、次は意表をついてFORTRANでも。実はOCamlに続いてF#を扱おうと考えていましたが、F#はどうしましょうか。
 FORTRANは高級言語としては世界最初のものとされており、様々な手続き型言語の祖先とされています。同じく関数型言語の祖先とされるLispは、今ではほとんど使用者がいなくなってしまったようですが(子孫のCommon Lisp、Emacs Lisp、Schemeなどは現役)、FORTRANは今でもスーパーコンピュータなどで使用されているようです。ただし、初期のFORTRANと最近のものではかなり仕様が違っていますので、最近のFORTRANが昔のFORTRANの子孫であり、古いFORTRANはLisp同様にあまり使用されなくなったとも考えられます。
 FORTRANは大文字で表記されることが多いようですが、FORTRAN 77以前のものをFORTRAN、Fortran 90以降のものをFortranと呼び分ける流儀もあるようです。この定義に従えば、以下で扱うものはFortranに当たる言語となりますが、以下「FORTRAN」で統一します。
 C言語は高速な言語の代名詞とされており、速度の単位として使用される場合がしばしばあります。「OCamlはCと互角あるいは数倍の処理時間で動作」なる文章は、OCamlの長所の解説として用いられます。また、Javaはそこそこに速い言語ですが、C言語と比べれば明らかに遅く、「重い」となじられたりします。
 しかし、そのC言語をもってしても、FORTRANの速度にはかなわないとされています。正確に言えば、FORTRANはベクトル計算などの機能を使用したり、命令が高速処理に都合の良い方式になっていたりと、スーパーコンピュータの性能を引き出す仕様になっているようです。スーパーコンピュータは処理当たりのコストが非常に大きく、C言語で1億円当たり100の処理ができるところをFORTRANで1%だけ多く処理すれば、約100万円分の差が生じる結果となります。スーパーコンピュータのような機能を備えていない一般のPCでは、さすがにそこまでの性能は期待できそうにありませんが、おそらくそれなりには速いのでしょう。VBの一部構文のルーツらしきものが垣間見えたり、他の様々な言語に影響を与えたらしい部分が色々あったりと、言語としても興味深いです。
 前置きはともかく、まずはコードを書いてみましょう。FORTRANのソースの拡張子は「*.f」なのですが、これは古いバージョンのソースを表すものであるため、ここではFortran 90を使うとして「*.f90」を拡張子とします。77以前のFORTRANでは行番号なる悪夢が存在しましたが、幸いにも最近のFORTRANでは必要なくなっており、そのまま書き始められます。
 まずはHello Worldから。
PROGRAM BLOG
	PRINT * , 'Hello FORTRAN'
END PROGRAM
 余談ながら、「END PROGRAM」と書くべきところを「END (プログラム名)」と書いてしまい、しかも末尾にセミコロンをつけてしまう癖がついてしまっており、大変困っています。
 print文のアスタリスクは、デフォルトの書式で出力することを表しています。色々な書式が用意されているのですが、ここでは深く考える必要はないでしょう。また、ここでは大文字を使用していますが、大文字と小文字の区別はありません。大文字の方がFORTRANらしく見えなくもありませんが、今後は小文字を使用するものとします。
 これをFORTRAN 77で書くと、以下のようなコードとなります。
00010 PROGRAM BLOG
00020  PRINT * , 'Hello FORTRAN 77'
00030 END PROGRAM
 COBOLといい、なぜ行番号はこれほど面倒なのでしょうか。COBOLを書く場合ですらコンパイラのフリースタイル指定で行番号を回避する私には、行番号などほとんど縁のないものなのですが、最近はBASICでさえ行番号を回避する傾向にあるようです。COBOL使いがJavaでとんでもないコード(おそらく変数が全部インスタンス変数として宣言されているようなものと推測される)を書いたといった話は聞いたことがありますが、GOTOに慣れきったBASIC使いが危険なものを書く恐れはないのでしょうか。
 FORTRANの特徴的な文化として、暗黙の型宣言があります。現在ではあまり推奨されていないようですが、FORTRANでは宣言をせずに変数を使用できます。しかも、先頭の文字がI,J,K,L,M,Nから始まる変数はinteger、そうでないものはrealとみなされます。整数がI以降の6文字なのは、Integerから連想しやすいためとされています。
program blog
	i = 10
	j = 3
	a = (i + j) * 0.5
	print * , i , j , a
end program

! "!"の後ろの記述はコメントとして扱われる
! 結果 : 10 3 6.5
 ただし、変数名のスペルミスが深刻なバグを招きかねないため、この機能は基本的には推奨されていません。暗黙の型宣言を無効にする「implicit none」を記述することが推奨されています。
program blog
	implicit none
!	i = 10
!	暗黙の型宣言ができなくなる
end program
 暗黙の宣言を無効にしたところで、明示的な変数の宣言を行ってみましょう。とはいえ、ごく単純な宣言の場合であれば、方法はCなどと全く同じですので、迷う必要はありません。整数はinteger、実数はreal、文字はcharacter、論理(他の言語でいうboolean)はlogical、倍精度実数はdouble precisionとされています。また、complexで複素数も扱えるらしいのですが、複素数とやらの使い方が良く分かりません。気の利いたサンプルの1つでも作りたいのですが、Wikipediaで調べてもさっぱり理解できません。
 複素数はともかくとして、まずはintegerを宣言・表示してみます。
program blog
	implicit none
	integer i
	i = 10
	print * , i
end program
 基本的にCやJavaと似通っていますので、非常に簡単です。
 しかしながら、調子に乗って以下のように書いても上手くいきません。コンパイルエラーが発生してしまいます。
program blog
	implicit none
	integer i = 10
	print * , i
end program
 上記のような操作を実行したければ、このように書かなければなりません。それにしても、なぜ「::」なる記述は様々な言語で、しかも違う意味で使われているのでしょうか。
program blog
	implicit none
	integer :: i = 10
	print * , i
end program
 この「::」の前には様々な属性を記述できます。以下のコードでは、pi及びeなる定数を宣言しています。
program blog
	implicit none
	real , parameter :: pi = 3.14159
	real , parameter :: e = 2.71828

	print * , 45.0 * pi / 180.0
end program
 論理型はtrueまたはfalseを保持しますが、FORTRANの書き方は少々変わっています。「.true.」のようにドットではさまなければならないのです。
program blog
	implicit none
	logical :: l = .true.
end program
 この種の記述は今後もいくつか出てきます。FORTRANではtrueやfalseといった名前の変数をも作成できるため、衝突を回避しているのでしょう。
カテゴリ [開発魔法][社会問題][経済・知的財産] [トラックバック 0][コメント 0]
<- 前の記事を参照 次の記事を参照 ->

- Blog by yamicha.com -