マツダ情報
マツダを各種ブログ(Blog)から一括検索します。
トップ > applet > applet - 人気ブログ(Blog)検索結果詳細 (2009年1月8日 7時)
2番目に書くプログラム
Hello,Worldの次に書くプログラムといえば、
- フィボナッチ数
- 階乗
- エラトステネスのふるい
あたりが普通ですよね? ラノベ(asin:408630421X)も、エラトステネスのふるいから始まってたし。
ボクは階乗を書くことが多いです。
作者:mzp
更新日:2009年1月6日 0時0分
[Python][30分プログラム]遅延リストでフィボナッチ数
30分プログラム、その504。今日、ミーティングで遅延リストの話をしたので、遅延リストを使ってフィボナッチ数を書いてみる。
最初、
improt itertools def ones(): return itertools.chain([1],ones())
とやったら、えらい目にあってしまった。
しょうがないので、俺chainを作って
def ones(): return chain(lambda: [1],lambda: ones())
と書けるようにした。
使い方
$ python fib.py 1 2 3 5 8 13 21 34 55 89 144 233
ソースコード
#! /usr/bin/python # -*- mode:python; coding:utf-8 -*- # # fib.py - # # Copyright(C) 2009 by mzp # Author: MIZUNO Hiroki / mzpppp at gmail dot com # http://howdyworld.org # # Timestamp: 2009/01/06 23:19:11 # # This program is free software; you can redistribute it and/or # modify it under MIT Lincence. # import itertools def chain(*iterables): for it in iterables: for element in it(): yield element def tail(it): it.next() return it def fibs(): return chain(lambda :[1,2],lambda : itertools.imap(lambda x,y: x + y,fibs(),tail(fibs()))) for (i,n) in itertools.izip(itertools.count(0),fibs()): print n if i > 10: break
参考
作者:mzp
更新日:2009年1月6日 0時0分
[F#][30分プログラム]F#を試してみた
30分プログラム、その503。OCamlに似てるけど、互換性はそれほどないと評判のF#を触ってみた。
ちょっとしか触っていないけど、内包表記があったり、小粋な演算子(|>とか<|とか)が定義されていたりと、いい言語な気がする。今、学校でC#を使っているけれど、これをF#に置き換えれたら、かなり幸せになれる気がする。
ただ、Windowsでしか動かないから、使うのが結構面倒くさい。一応、MacPortsにも入っているから、あとで試そうと思う。
使い方
VisualStudioに読み込んで、Ctrl-F5で以下のような結果が得られる。
fact(10) = 3628800 fib(5) = 120
ソースコード
#light let rec fib n = if n = 0 then 1 else n * fib(n - 1) let rec fact = function 0 -> 1 | n -> n * fact (n-1) let _ = printfn "fact(10) = %d" <| fact 10; printfn "fib(5) = %d" <| fib 5
参考
作者:mzp
更新日:2009年1月5日 14時17分
[F#]F#とOCamlの違い
F# - Microsoft Research についてきたTutorial.fsを読みながら、F#とOCamlの違いついてメモしてみます。
拡張子が.fs
OCamlは.mlだけど、F#は.fs。
コメントが//
OCamlのコメントは(* ... *)だけど、F#は//。
範囲
let oneToTen = [1..10]
内包表記
/// The squares of the first 10 integers let squaresOfOneToTen = [ for x in 0..10 -> x*x ]
ディクショナリ
let lookupTable = dict [ (1, "One"); (2, "Two") ] let oneString = lookupTable.[1]
パイプライン
2008-11-12 - まぁ、そんなもんでしょう。の+>と同じですね。
let squares3 = [1; 2; 3; 4] |> List.map (fun x -> x*x)
@@と同じの<|もある。
fact <| 1 + 2
型やフィールドが大文字で始まる
OCamlでこれって許されていたかな?どっちにしろ、違和感がある。
type Card = { Name : string; Phone : string; Ok : bool }
クラスのインタフェース
お、だんだんずれてきたぞ。
// Types: classes // --------------------------------------------------------------- /// A 2-dimensional vector type Vector2D(dx:float, dy:float) = // The pre-computed length of the vector let length = sqrt(dx*dx + dy*dy) /// The displacement along the X-axis member v.DX = dx /// The displacement along the Y-axis member v.DY = dy /// The length of the vector member v.Length = length // Re-scale the vector by a constant member v.Scale(k) = Vector2D(k*dx, k*dy) // Types: interfaces // --------------------------------------------------------------- type IPeekPoke = abstract Peek: unit -> int abstract Poke: int -> unit
// Print a result using %A for generic printing printfn "listC = %A" listC
作者:mzp
更新日:2009年1月5日 0時0分
[Perl][30分プログラム]Whitespace実装用のスタック
30分プログラム、その502。最近、Whitespaceとかbrainfuckとかの難読言語が流行っているらしいので、ボクもWhitespaceを実装してみようと思う。というわけで、まずはスタックを実装してみた。
wikipedia:Whitespaceに載っていた5つのスタック操作は実装してみた。
- push: 数値をスタックに積む
- dup: スタックの1番上を複製する
- dup_n: スタックのn番目をコピーして一番上に積む
- swap: スタックの1番目と2番目を交換する
- pop: スタックの1番上を物を捨てる
使い方
# stackを作る my $stack = Stack->new; # 3つほど数字をpushする $stack->push(42)->push(1)->push(0); # 先頭を複製して、pushする $stack->dup; # 先頭を削除する $stack->pop;
ソースコード
#! /usr/bin/perl # -*- mode:perl; coding:utf-8 -*- # # whitespace-stack.pl - whitespace実装用のstack # # Copyright(C) 2009 by mzp # Author: MIZUNO Hiroki / mzpppp at gmail dot com # http://howdyworld.org # # Timestamp: 2009/01/03 22:23:06 # # This program is free software; you can redistribute it and/or # modify it under MIT Lincence. # use strict; use warnings; use Data::Dumper; package Stack; sub new{ my ($class) = @_; bless([],$class); } sub push{ # push integer my ($self,$n) = @_; push @$self,$n; $self; } sub dup{ # duplicate a top of stack my ($self) = @_; $self->push($self->[-1]); } sub dup_n{ # duplicate n-th of stack my ($self,$n) = @_; my $val = $self->[-$n]; $self->push($val); } sub swap{ # swap 1-st of stack and 2-nd of stack my ($self,$n) = @_; my $first = $self->[-1]; my $second = $self->[-2]; $self->[-1] = $second; $self->[-2] = $first; $self; } sub pop{ # remove a top of stack my ($self,$n) = @_; pop @$self; $self; } package main; my $stack = Stack->new; $stack->push(42)->push(1)->push(0); print Dumper($stack); $stack->dup; print Dumper($stack); $stack->pop; print Dumper($stack);
参考
作者:mzp
更新日:2009年1月3日 0時0分
あけましておめでとうございます
↑干支のつもり。
みなさま、あけましておめでとうございます。今年もよろしくお願いします。
今年は就職先を決めないといけない年なので、ステキな会社があったら教えてください。とりあえず、コードを書ける会社がいいです。
作者:mzp
更新日:2009年1月2日 0時0分
[Erlang][30分プログラム]ESDLを試したけど、失敗した
30分プログラム、その501。ErlangのSDLバインディング、ESDLを試したけど、うまくいかなかった。
画像をロードして表示するだけのはずなのに、まっしろなウインドウが表示されるだけ。なんとなく、MacPortsで入れたSDLが悪いんじゃないかという気がしてる。
追記(2009-01-03): Ubuntuで動かしたら、うまくいきました。
使い方
1> sdl_test:go().
ソースコード
-module(sdl_test). -compile([export_all]). -include_lib("esdl/include/sdl.hrl"). -include_lib("esdl/include/sdl_video.hrl"). -include_lib("esdl/include/sdl_events.hrl"). go() -> _Server = sdl:init(?SDL_INIT_VIDEO), sdl_util:debug(1), ScreenRef = sdl_video:setVideoMode(640, 480, 8, ?SDL_ANYFORMAT bor ?SDL_RESIZABLE), Screen = sdl_video:getSurface(ScreenRef), Bmp = sdl_video:loadBMP("air.bmp"), sdl_video:blitSurface(Bmp,null,Screen,null), sdl_video:updateRect(Screen,0,0,640,480), loop(). loop() -> case sdl_events:waitEvent() of #quit{} -> exit(normal); _ -> loop() end.
参考
作者:mzp
更新日:2009年1月2日 0時0分
[Scala][30分プログラム]Scala plugin for eclipseを試してみた
30分プログラム、その500。Eclipseを毛嫌いばかりしていてもしょうがないので、久しぶりにEclipseを使ってみた。
詳しい使い方をスクリーンショットをまじえつつ書こうと思ったけど、わりと普通だったのでやめた。
インストールの仕方と使い方はScala Plugin for Eclipse | The Scala Programming Languageは見ればわかるよ。
スクリーンショット
参考
作者:mzp
更新日:2008年12月31日 0時0分
2番目に書くプログラム
Hello,Worldの次に書くプログラムといえば、
- フィボナッチ数
- 階乗
- エラトステネスのふるい
あたりが普通ですよね? ラノベ(asin:408630421X)も、エラトステネスのふるいから始まってたし。
ボクは階乗を書くことが多いです。
作者:mzp
更新日:2009年1月5日 15時0分
[Python][30分プログラム]遅延リストでフィボナッチ数
30分プログラム、その504。今日、ミーティングで遅延リストの話をしたので、遅延リストを使ってフィボナッチ数を書いてみる。
最初、
improt itertools def ones(): return itertools.chain([1],ones())
とやったら、えらい目にあってしまった。
しょうがないので、俺chainを作って
def ones(): return chain(lambda: [1],lambda: ones())
と書けるようにした。
使い方
$ python fib.py 1 2 3 5 8 13 21 34 55 89 144 233
ソースコード
#! /usr/bin/python # -*- mode:python; coding:utf-8 -*- # # fib.py - # # Copyright(C) 2009 by mzp # Author: MIZUNO Hiroki / mzpppp at gmail dot com # http://howdyworld.org # # Timestamp: 2009/01/06 23:19:11 # # This program is free software; you can redistribute it and/or # modify it under MIT Lincence. # import itertools def chain(*iterables): for it in iterables: for element in it(): yield element def tail(it): it.next() return it def fibs(): return chain(lambda :[1,2],lambda : itertools.imap(lambda x,y: x + y,fibs(),tail(fibs()))) for (i,n) in itertools.izip(itertools.count(0),fibs()): print n if i > 10: break
参考
作者:mzp
更新日:2009年1月5日 15時0分
[F#][30分プログラム]F#を試してみた
30分プログラム、その503。OCamlに似てるけど、互換性はそれほどないと評判のF#を触ってみた。
ちょっとしか触っていないけど、内包表記があったり、小粋な演算子(|>とか<|とか)が定義されていたりと、いい言語な気がする。今、学校でC#を使っているけれど、これをF#に置き換えれたら、かなり幸せになれる気がする。
ただ、Windowsでしか動かないから、使うのが結構面倒くさい。一応、MacPortsにも入っているから、あとで試そうと思う。
使い方
VisualStudioに読み込んで、Ctrl-F5で以下のような結果が得られる。
fact(10) = 3628800 fib(5) = 120
ソースコード
#light let rec fib n = if n = 0 then 1 else n * fib(n - 1) let rec fact = function 0 -> 1 | n -> n * fact (n-1) let _ = printfn "fact(10) = %d" <| fact 10; printfn "fib(5) = %d" <| fib 5
参考
作者:mzp
更新日:2009年1月5日 5時17分
[F#]F#とOCamlの違い
F# - Microsoft Research についてきたTutorial.fsを読みながら、F#とOCamlの違いついてメモしてみます。
拡張子が.fs
OCamlは.mlだけど、F#は.fs。
コメントが//
OCamlのコメントは(* ... *)だけど、F#は//。
範囲
let oneToTen = [1..10]
内包表記
/// The squares of the first 10 integers let squaresOfOneToTen = [ for x in 0..10 -> x*x ]
ディクショナリ
let lookupTable = dict [ (1, "One"); (2, "Two") ] let oneString = lookupTable.[1]
パイプライン
2008-11-12 - まぁ、そんなもんでしょう。の+>と同じですね。
let squares3 = [1; 2; 3; 4] |> List.map (fun x -> x*x)
@@と同じの<|もある。
fact <| 1 + 2
型やフィールドが大文字で始まる
OCamlでこれって許されていたかな?どっちにしろ、違和感がある。
type Card = { Name : string; Phone : string; Ok : bool }
クラスのインタフェース
お、だんだんずれてきたぞ。
// Types: classes // --------------------------------------------------------------- /// A 2-dimensional vector type Vector2D(dx:float, dy:float) = // The pre-computed length of the vector let length = sqrt(dx*dx + dy*dy) /// The displacement along the X-axis member v.DX = dx /// The displacement along the Y-axis member v.DY = dy /// The length of the vector member v.Length = length // Re-scale the vector by a constant member v.Scale(k) = Vector2D(k*dx, k*dy) // Types: interfaces // --------------------------------------------------------------- type IPeekPoke = abstract Peek: unit -> int abstract Poke: int -> unit
// Print a result using %A for generic printing printfn "listC = %A" listC
作者:mzp
更新日:2009年1月4日 15時0分
[Perl][30分プログラム]Whitespace実装用のスタック
30分プログラム、その502。最近、Whitespaceとかbrainfuckとかの難読言語が流行っているらしいので、ボクもWhitespaceを実装してみようと思う。というわけで、まずはスタックを実装してみた。
wikipedia:Whitespaceに載っていた5つのスタック操作は実装してみた。
- push: 数値をスタックに積む
- dup: スタックの1番上を複製する
- dup_n: スタックのn番目をコピーして一番上に積む
- swap: スタックの1番目と2番目を交換する
- pop: スタックの1番上を物を捨てる
使い方
# stackを作る my $stack = Stack->new; # 3つほど数字をpushする $stack->push(42)->push(1)->push(0); # 先頭を複製して、pushする $stack->dup; # 先頭を削除する $stack->pop;
ソースコード
#! /usr/bin/perl # -*- mode:perl; coding:utf-8 -*- # # whitespace-stack.pl - whitespace実装用のstack # # Copyright(C) 2009 by mzp # Author: MIZUNO Hiroki / mzpppp at gmail dot com # http://howdyworld.org # # Timestamp: 2009/01/03 22:23:06 # # This program is free software; you can redistribute it and/or # modify it under MIT Lincence. # use strict; use warnings; use Data::Dumper; package Stack; sub new{ my ($class) = @_; bless([],$class); } sub push{ # push integer my ($self,$n) = @_; push @$self,$n; $self; } sub dup{ # duplicate a top of stack my ($self) = @_; $self->push($self->[-1]); } sub dup_n{ # duplicate n-th of stack my ($self,$n) = @_; my $val = $self->[-$n]; $self->push($val); } sub swap{ # swap 1-st of stack and 2-nd of stack my ($self,$n) = @_; my $first = $self->[-1]; my $second = $self->[-2]; $self->[-1] = $second; $self->[-2] = $first; $self; } sub pop{ # remove a top of stack my ($self,$n) = @_; pop @$self; $self; } package main; my $stack = Stack->new; $stack->push(42)->push(1)->push(0); print Dumper($stack); $stack->dup; print Dumper($stack); $stack->pop; print Dumper($stack);
参考
作者:mzp
更新日:2009年1月2日 15時0分
あけましておめでとうございます
↑干支のつもり。
みなさま、あけましておめでとうございます。今年もよろしくお願いします。
今年は就職先を決めないといけない年なので、ステキな会社があったら教えてください。とりあえず、コードを書ける会社がいいです。
作者:mzp
更新日:2009年1月1日 15時0分
[Erlang][30分プログラム]ESDLを試したけど、失敗した
30分プログラム、その501。ErlangのSDLバインディング、ESDLを試したけど、うまくいかなかった。
画像をロードして表示するだけのはずなのに、まっしろなウインドウが表示されるだけ。なんとなく、MacPortsで入れたSDLが悪いんじゃないかという気がしてる。
追記(2009-01-03): Ubuntuで動かしたら、うまくいきました。
使い方
1> sdl_test:go().
ソースコード
-module(sdl_test). -compile([export_all]). -include_lib("esdl/include/sdl.hrl"). -include_lib("esdl/include/sdl_video.hrl"). -include_lib("esdl/include/sdl_events.hrl"). go() -> _Server = sdl:init(?SDL_INIT_VIDEO), sdl_util:debug(1), ScreenRef = sdl_video:setVideoMode(640, 480, 8, ?SDL_ANYFORMAT bor ?SDL_RESIZABLE), Screen = sdl_video:getSurface(ScreenRef), Bmp = sdl_video:loadBMP("air.bmp"), sdl_video:blitSurface(Bmp,null,Screen,null), sdl_video:updateRect(Screen,0,0,640,480), loop(). loop() -> case sdl_events:waitEvent() of #quit{} -> exit(normal); _ -> loop() end.
参考
作者:mzp
更新日:2009年1月1日 15時0分
[Scala][30分プログラム]Scala plugin for eclipseを試してみた
30分プログラム、その500。Eclipseを毛嫌いばかりしていてもしょうがないので、久しぶりにEclipseを使ってみた。
詳しい使い方をスクリーンショットをまじえつつ書こうと思ったけど、わりと普通だったのでやめた。
インストールの仕方と使い方はScala Plugin for Eclipse | The Scala Programming Languageは見ればわかるよ。
スクリーンショット
参考
作者:mzp
更新日:2008年12月30日 15時0分


