ときどきの雑記帖 めぐりあい電脳空間編

最新ページへのリンク
目次ページへのリンク

一つ前へ 2010年11月(中旬)
一つ後へ 2010年12月(上旬)

ホームへ

2010年11月30日

■_

・いろいろ
YOUNGKING OURS (ヤングキングアワーズ) 2011年 01月号 [雑誌]
ドリフターズはなし。ナポレオンはえーとなんて名前のクーデターだっけ?
MOONLIGHT MILE 21 (ビッグコミックス)
一巻と比べるとえらい変わっているような。
そばもん ニッポン蕎麦行脚 5 (ビッグコミックス)
安定。

irb(main):001:0> 1.methods.sort
=> [:!, :!=, :!~, :%, :&, :*, :**, :+, :+@, :-, :-@, :/, :<, :<<, :<=, :<=>, :==,
:===, :=~, :>, :>=, :>>, :[], :^, :__id__, :__send__, :abs, :abs2, :angle, :arg,
:between?, :ceil, :chr, :class, :clone, :coerce, :conj, :conjugate, :define_singleton_method,
:denominator, :display, :div, :divmod, :downto, :dup, :enum_for, :eql?, :equal?, :even?,
:extend, :fdiv, :floor, :freeze, :frozen?, :gcd, :gcdlcm, :hash, :i, :imag, :imaginary,
:initialize_clone, :initialize_dup, :inspect,:instance_eval, :instance_exec, :instance_of?,
:instance_variable_defined?, :instance_variable_get, :instance_variable_set, :instance_variables,
:integer?, :is_a?, :kind_of?, :lcm, :magnitude, :method, :methods, :modulo, :next, :nil?,
:nonzero?, :numerator, :object_id, :odd?, :ord, :phase, :polar, :pred, :private_methods,
:protected_methods, :public_method, :public_methods, :public_send, :quo, :rationalize, :real,
:real?, :rect, :rectangular, :remainder, :respond_to?, :respond_to_missing?, :round, :send,
:singleton_class, :singleton_method_added, :singleton_methods, :size, :step, :succ, :taint,
:tainted?, :tap, :times, :to_c, :to_enum, :to_f, :to_i, :to_int, :to_r, :to_s, :truncate,
:trust, :untaint, :untrust,:untrusted?, :upto, :zero?, :|, :~]
irb(main):002:0>

(適当に整形しています) そうか。Fixnum には [] があって、期待通りの動きをするのだった。 任意の整数をビット列に化けさせてストリームで取り出すなんてのは 他の言語も含めてどんな感じになるんだろうか。

■_

Prolog は何回やってもよくわからん

【論理】Prolog【初心者】 
94 デフォルトの名無しさん [sage] 2010/11/29(月) 22:45:09 ID: Be:
    論理プログラミングに最近強い関心があるので質問

    1.学ぶ際にPrologを選んでも大丈夫?(念の為)
    2.Wikipediaに目を通した感じではAZ-PrologやSWI-Prologが良さそうだけど、お勧めの処理系は? 

95 デフォルトの名無しさん [sage] 2010/11/30(火) 05:10:29 ID: Be:
    1..それ以外の選択はむずかしいのではないかな。
    2.. 日本語マニュアルが必要なら、AZ=Prolog。この処理系は1980年代に一世を風靡した
      Prolog-KABAの後継を目指して開発されたもので、オンラインマニュアルの他、
      Prolog-KABAの解説本も参考書になります。
      今後、多くの仲間とライブラリを分け合ったりしながら発展していくには、
      SWI-Prologがお勧めです。2000年代に入って最も活性のある処理系だと思います。
      以前はバージョンによっていろいろ問題がありましたが現在は日本語も制限なく使えます。
    おまけ.. Prologに慣れたら、Progol(誤植ではない)という処理系をインストールて
      機能論理Prologで遊んでみるといいと思います。すでに定義された節から、
      どうやったら新しいルールをProgolに生成させることができるか。大変興味い
      テーマを楽しめます。 

96 95 [sage] 2010/11/30(火) 05:12:33 ID: Be:
    機能論理Prolog は 機能論理プログラミングの間違いでした。

97 95 [sage] 2010/11/30(火) 05:13:53 ID: Be:
    それから AZ=Prolog -> AZ-Prolog

98 デフォルトの名無しさん [sage] 2010/11/30(火) 06:33:50 ID: Be:
    >>95
    もしProgolに手を出すなら
    帰納論理プログラミングの入門書もどうぞ。

    帰納論理プログラミング
    http://furukawa.sfc.keio.ac.jp/book/
    http://www.amazon.co.jp/dp/4320120140/ 

99 デフォルトの名無しさん [sage] 2010/11/30(火) 07:23:30 ID: Be:
    大変! ^ wwww
    機能論理プログラミングになっている。
    帰納論理プログラミングの間違いです。 

100 デフォルトの名無しさん [sage] 2010/11/30(火) 08:27:40 ID: Be:
    >>95-99
    レスありがとう
    処理系は俺の場合は既存の資産もないし、英語マニュアルに抵抗もないからSWI-Prologにする
    帰納論理プログラミングも面白そう
    ちょっと違うかもしれないが論理プログラミングにおけるメタプログラミングみたいな感じ? 

101 デフォルトの名無しさん [sage] 2010/11/30(火) 08:40:23 ID: Be:
    >>100
    関数型のメタプログラミングはあまり詳しくないから、そうだとも違うともいえませんが、
    帰納論理プログラミングは(集合の)外延定義にヒントを与えてやると内包定義つまりルールを
    生成してくるというような感じです。もちろん、外延だけでなく、内包も考慮しますから、
    かなり複雑なルールの生成も可能なようです。しかし、一種のリバースエンジニアリング的な
    ものですから、生成されるルールの可能性が大きく成りすぎて、収拾がつかない。というのが
    私のレベルですね。 

102 101 [sage] 2010/11/30(火) 08:48:01 ID: Be:
    リバースエンジニアリング的という表現は適切でなかったので撤回します。
    どういう表現が適切であるかは、もう少し考えます 

103 デフォルトの名無しさん [sage] 2010/11/30(火) 12:56:16 ID: Be:
    メタプログラミングは「ロジックを生成するロジック」または「プログラムを生成するプログラム」
    帰納的にルールを導出するというのがメタプログラミング的だと思ったけど
    よく考えたら帰納も演繹もそうありうるような気がしてきた…… 

■_ ねんがんの

2010年11月26日

■_

・聴きたい
http://mainichi.jp/enta/photo/news/20101126mog00m200020000c.html?inb=fe が、20時からでは某イベントに行っとりますがながな。

・最終号
月刊ベイスターズ最終号の表紙は筒香でした。 未来への期待と見るべきかどうか。

■_

解決したのはいいんですが(別): つらつらぐさ http://mumrik.air-nifty.com/blog/2010/11/26_wupermission.html

■_ けんろん!

いけがみさんの話では step1 からして「堅い」そうで。

step2 で挙げられている本、途中まで読んで放置中だわ ○| ̄|_


Category theory for Haskell programmers | Geoff Hulette

Category theory for Haskell programmers
Haskell プログラマーのための圏論

Here is some advice, gained through my own trial and error, on how to teach yourself 
basic category theory.  This advice will probably be useful only if you are like me, 
i.e. a computer scientist and Haskell programmer without a strong background in 
advanced math.

ここに書かれているのはわたしが自分で trial and error によって得た
圏論を独習するためのちょっとしたアドバイスです。
このアドバイスはあなたがわたしと同様である、つまり
strong backgraound in advanced math を欠いた
コンピューター科学者(cimputer scientist)でありHaskellプログラマーである場合に
有用であるかもしれません。


The development of category theory was motivated by problems in the mathematical field 
of abstract algebra, and most of the literature assumes that you come from this 
background. What little knowledge I have of groups, rings, fields, and so on was 
stretched and then quickly broken by the examples in mathematically-oriented textbooks 
(e.g. Mac Lane).  I decided I needed a different approach.

圏論の development は抽象代数という数学の分野における問題に関することが動機でした。
そしてそれはあなたがその方面の知識を持っていることが仮定されているものです
#ちょー訳
わたしが持っていたわずかな知識は群 (groups)、環 (rings)、体 (fields) といったものの
延長で、数学指向の教科書 (例の黄色い本とか) にあった例題によって即座に
粉砕されてしまうようなものでした。

So, here is how I acquired the basics:
そして、以下に挙げたのがわたしが得た基本です:

Step 1:  Read Brent Yorgey's excellent Typeclassopedia. Besides being a great 
intermediate Haskell tutorial and guide to the standard libraries, it will make you 
understand why programmers should care about category theory.

Read Brent Yorgey の  excellent な Typeclassopedia を読む。
. Besides being a great 
intermediate Haskell tutorial and guide to the standard libraries, it will make you 
understand why programmers should care about category theory.


Step 2: Work through Benjamin Pierce's Basic Category Theory for Computer Scientists. 
Although frequently criticized for its terseness, this book is one of the few resources
available that anchors the abstract notions of category theory to concrete and accessible
topics in computer science.

Step 3: Supplement Pierce with Eugenia Cheng's excellent tutorial videos. I recommend 
reading a section in Pierce and then watching the relevant videos. This combo worked 
really well for me.

Step 4: It may help to have a look at the category-extras package on Hackage. For 
example, I found the source code for the Control.Functor.Adjunction module helpful in 
understanding adjunctions.  Simply reading the type annotations can provide intuition.

Pierce's book ends with adjunctions which are, unfortunately, where monads begin. By 
this point, however, I was comfortable enough with the basic concepts to move on to an 
advanced textbook (namely Mac Lane, see below).

You may be tempted to start with Saunders Mac Lane's Categories for the Working Mathematician.
This is pretty much the definitive text on category theory, but unless you have a firm
grasp of abstract algebra you may find it tough going. Until I understood the basic
ideas, I found it utterly impenetrable.

At the other end of the spectrum is Conceptual Mathematics: A First Introduction to 
Categories by F. William Lawvere. This book starts with very basic foundations and is 
easy to follow.  It does a good job of motivating category theory through examples 
(although not from computer science).  I found that it moved a bit too slowly.

If you know of any other good resources for mathematically-impaired computer 
scientists trying to learn category theory, please leave a comment below.


   1. Aaron Culich says:
      November 23, 2010 at 6:16 pm

      Category Theory for Computing Science by Michael Barr & Charles Wells. It is 
      out of print but if you write to CRM Books at the Université de Montréal you can
      order copy for CAN$45 + shipping/export fees (at least that is what was
      last quoted to me).

          * Eckart says:	
            November 23, 2010 at 11:56 pm	

            There also is a PDF version based on the book available here :
            http://folli.loria.fr/cds/1999/library/pdf/barrwells.pdf

            (via wikipedia)

   2. solrize says:	
      November 23, 2010 at 6:56 pm	

      Haskell Wikibook is a good place to start:

      http://en.wikibooks.org/wiki/Haskell/Category_theory

(略)

■_


【入門】Common Lisp その7【質問よろず】 
502 デフォルトの名無しさん [sage] 2010/11/26(金) 07:28:07 ID: Be:
    どうでも良いけどLisperって早起きの印象があるなぁ
    shiroさんなんて夜中の3時とかに何か書いたりしてる、いつ寝てるんだろう

503 デフォルトの名無しさん [sage] 2010/11/26(金) 07:38:01 ID: Be:
    3時って日本時間のか?
    そうだとしたら shiro さんがいるハワイは8時頃だ 

505 502 [sage] 2010/11/27(土) 09:27:33 ID: Be:
    >>503
    べ、別に知らなかったわけじゃないんだからねっ!
    ちょっと勘違いしてただけなんだから!
    (///) 

506 デフォルトの名無しさん [sage] 2010/11/27(土) 18:26:02 ID: Be:
                〃´⌒ヽ
    .     , -――  メ/_´⌒ヽ
       /   / ̄  ´ヽ ヽ
    .  /  ,  /// ト. !  、 丶ヽ
      l  / /(((リ从  リノ)) '
      |  i  l   . ヽノ .V l
      l ,=!  l  ///    ///l l   ねんがんのLISPましんをてにいれたぞ!
      l ヾ! ', l    ヽ_フ   l l
      |  ヽヽヽ        //
      l    ヾ≧ , __ , イ〃
      li   (´`)l {ニ0ニ}、 |_"____
      li   /l, l└ タl」/l´  LISP  `l
      リヽ/ l l__ ./  |_________|
       ,/  L__[]っ /      /

    ttp://twitter.com/#!/nekoallergie/status/8449374745001984 

507 デフォルトの名無しさん [sage] 2010/11/28(日) 10:53:23 ID: Be:
    伝説のポケコンか 

508 デフォルトの名無しさん [sage] 2010/11/28(日) 16:26:08 ID: Be:
    >>506
    いいなぁ、あれ欲しかったんだけど買えなかったんだよ

    ポケコンコレクションで欠けてる部分結構でかいんだよな 

510 デフォルトの名無しさん [sage] 2010/11/29(月) 00:12:45 ID: Be:
    LISPマシン - Wikipedia
    http://ja.wikipedia.org/wiki/LISP%E3%83%9E%E3%82%B7%E3%83%B3

    これなのか
    一切見たことがなかったから興味があるよ
    今のパソコン換算でいうと(言うのが難しいかもしれないけど)、どれくらいのスペックなの? 

511 デフォルトの名無しさん [sage] 2010/11/29(月) 08:26:10 ID: Be:
    いや、AI-1000はそういうのを期待しちゃダメだw 

513 デフォルトの名無しさん [sage] 2010/11/29(月) 13:24:49 ID: Be:
    >>510
    1990年ごろには汎用のワークステーション使ったほうが安くて同じくらいの性能出るよね、
    という話になったということなので、SPARCstation 1ぐらいということになるのかな。 

514 デフォルトの名無しさん [sage] 2010/11/29(月) 13:27:33 ID: Be:
    >>513 はAI-1000の話じゃなくてLISPマシンの話ね 

515 デフォルトの名無しさん [sage] 2010/11/29(月) 13:48:24 ID: Be:
    AI-1000は今のコンピュータに例えると電気釜くらいの性能。
    >>513
    SPARC機に刺すシンボリックスのワンボードLispマシンあったけどね。
    もともと環境が売りなので、性能比べても仕方ないけど。 

ちんまい Lisp マシンはほしいかも。

■_

■_

だめだぜんぜん進まない○| ̄|_

■_

2010年11月29日

■_

これ http://saitamanodoruji.tumblr.com/post/1432592591 の プログラミング言語版をどこかで見たような気がするんだけど見つからない。 気のせいか?

■_

パチンコもパチスロもやらないけどこれは…w

【ナポレオン】長谷川哲也30【アイゼンファウスト】 [chaika]
383 名無しんぼ@お腹いっぱい [sage] 2010/11/27(土) 19:30:18 ID:zJ+CgLwyP Be:
    ほい早売りget、巻頭でCRナポレオン3P紹介

    ナポレオン:杉田智和
    ダヴー:大羽武士
    ジュノー:関幸司
    オージュロー:千葉繁
    ミュラ:成田剣
    マッセナ:高階俊嗣
    ロベスピエール:銀河万丈
    バラス:郷里大輔
    クトゥーゾフ:乃村健次
    サン・ジュスト:鈴木貴征
    ビクトル:中國卓郎
    ジョゼフィーヌ:浅井晴美
    ポリーヌ:田澤利依子 

385 名無しんぼ@お腹いっぱい [sage] 2010/11/27(土) 19:36:17 ID:ZqSQk+Wi0 Be:
    万丈ボイスで「私は童貞だ」が聞けるのか 

386 名無しんぼ@お腹いっぱい [sage] 2010/11/27(土) 19:55:55 ID:9FOXv9B10 Be:
    >>385
    ギレン総帥が「私は童貞だ!」と告白するシーンを連想してしまったww 

387 名無しんぼ@お腹いっぱい [sage] 2010/11/27(土) 20:13:40 ID:En+ZGhYw0 Be:
    >>383
    ㌧クス! 超㌧クス!

    うお~、ロベ様のお声が聞いてみたいな~。

    パチンコはまだできないけどきっと覚えます! 

388 名無しんぼ@お腹いっぱい [sage] 2010/11/27(土) 20:14:25 ID:EFUnybWF0 Be:
    ナポレオンの配役は、変態性とツッコミ能力を助長するような 

389 名無しんぼ@お腹いっぱい [sage] 2010/11/27(土) 20:27:16 ID:NULRNAWI0 Be:
    オージュローからますます世紀末臭がw 

390 名無しんぼ@お腹いっぱい [sage] 2010/11/27(土) 20:31:47 ID:BY+w1X+s0 Be:
    予想が当たったのはオージュローだけだった 

391 名無しんぼ@お腹いっぱい [sage] 2010/11/27(土) 20:55:27 ID:zJ+CgLwyP Be:
    今適当に調べて補足
    ナポレオン:杉田智和:それ町のモリアーキー、キョン、銀さん
    ダヴー:大羽武士:BLゲー常連?薄桜鬼の島田魁
    ジュノー:関幸司:情報少、エロゲBunnyBlack
    オージュロー:千葉繁:それ町の松田旬作、次回北斗の拳2ゥーッ!ほか、たくさん
    ミュラ:成田剣:コードギアスのオレンジ
    マッセナ:高階俊嗣:ドム(プランB?ねェよ、んなもん)
    ロベスピエール:銀河万丈:ギレン閣下、ウドのコーヒーは苦い
    バラス:郷里大輔:ドズル閣下、ひろみちゃん
    クトゥーゾフ:乃村健次:範馬勇次郎
    サン・ジュスト:鈴木貴征:BLゲー常連?薄桜鬼の山崎烝
    ビクトル:中國卓郎:ヨスガノソラのダブリ友人ほか、エロゲに出演多数?
    ジョゼフィーヌ:浅井晴美:深井とかももぞの名義でエロゲ出演多数
    ポリーヌ:田澤利依子:情報少

■_ やってみた

大元はこれらしいんですが 逆転したビット列 どう書く?org まったく見ずに。


F#:どう書く?org - 逆転したビット列 - Gushwell's F# Programming Diary
今回は、どう書く?org の「逆転したビット列 」をF#で書いてみました。 問題は、


    32以下の正の整数nが与えられた場合に、 0以上、2のn乗未満の整数を「ビット的に逆転したもの」のリストを作成する関数を書いてください。
    なお「ビット的に逆転」とはnotを使った反転ではなく、 「0001」を「1000」にするような処理を指すものとします。 

というものです。

n = 4の時には [0, 8, 4, 12, 2, 10, 6, 14, 1, 9, 5, 13, 3, 11, 7, 15] が正解です。

open System.Linq;

let GetBits (obj:int) =
    [ for n in 0..31 -> if obj &\1&\1&\1 (0x01 <<< n) <> 0 then 1 else 0 ]
  

let GetReverseNum num width =
    GetBits num
    |> Seq.take(width)
    |> Seq.mapi (fun i b -> b <<< (width - i - 1) )
    |> Seq.reduce (fun r b -> r ||| b )

let GetReverseNums width =
    [ for i in 0..((1 <<< width) - 1) -> GetReverseNum i width ]
    
    
let Main() =
    GetReverseNums 4 |> Seq.iter (fun n -> printfn "%d" n)

do Main()

ビット列を作りだし、それを操作しています。
思ったよりも、かなり面倒な処理になりました。
もっと簡潔にかけそうな気もしますが、僕の実力はこんなもんです。

次に書いたのが、.NET Frameworkの機能を利用したもの。
(略)

ぱっと考えたものなので、どう書くにはきっともっとすごいのがあるんだろう。


irb(main):014:0> n=4
=> 4
irb(main):015:0> [*0..2**n-1].map{|e| sprintf("%0#{n}b", e).reverse.to_i(2)}
=> [0, 8, 4, 12, 2, 10, 6, 14, 1, 9, 5, 13, 3, 11, 7, 15]

sprintf とか reverse が気にいらない。

■_ もなど

reddit から。


Do I get Monads? : haskell

New Haskeller here. I went through 'Learn You a Haskell...' and my Python oriented 
mind interpreted monads thusly:

Haskell 初心者です。'Learn You a Haskell...' を読んでみたのですが、
自分の Python oriented mind がモナドをこのように解釈させてしまうのです

A container (e.g. a tree or a list) is a monad if it can create a copy of itself that 
has the same structure as the original, but each element in the copy is the result of 
a mapping function applied to the corresponding element of the original container.

あるコンテナー(ツリーやリスト) は、オリジナルとして同じ構造を持った自分自身のコピーが
作れればモナドである。しかし、コピーの中にあるそれぞれの要素はマッピング関数を
コピー元のコンテナーの対応する要素に対して適用した結果である。

In Python you can use map() or list comprehensions for to apply a function on each 
element of a list. Monads let you extend this feature to other kinds of structures too 
(trees, 'wrapped' values, etc.).

Python では map() や list comprehensions (リスト内包) を
あるリストの各要素に対して関数を適用するのに使えます。
モナドはあなたにこの機能を他の種類の structures に対しても拡張させます
(trees, 'wrapped' values, etc.)。

Of course, being lazy means the function will not be applied to all elements right 
away, but only as elements are accessed.

もちろん、lazy であることはその関数がすべての要素に対して期待通り適用されるわけではなく、
アクセスされた要素に対してのみ適用されることを意味します。

Am I on the right track?
わたしは正しく認識できているでしょうか?


As others have said, what you describe is Functors. For a functor to be monad you also 
need a function called join and function called return.

他の人がすでに指摘しているように、あなたが説明しているのは関手 (Functors) です。
関手をモナドにするには join と呼ばれる関数と return と呼ばれる関数が必要です。

join :: m (m a) -> m a
return :: a -> m a

Where return puts a value into a monad in the simples way possble, for example return 
x == [x], return x == Just x and so on.

Join, as you can see from the type, is a way to "flatten data". For lists 
it's the concat function, for Maybe we have

join $ Just (Just x) == Just x
join $ Just Nothing == Nothing
join Nothing == Nothing.

For IO we have

join io = do
            io2 <- io
            io2

The join function has to satisfy these laws, for the functor to be a monad:

このjoin関数はこ以下の法則(laws)を、ファンクターをモナドとするために満足しなければなりません:

join $ return a == a
join $ fmap return m == m
join $ join m == join $ fmap join m

The rules all makes sense if you think about them for a while.

However, the way people usually define monads is not via the join function but using 
the bind operator (>>=) which can be defined as

  (>>=) :: m a -> (a -> m b) -> m b
  m >>= f = join $ fmap f m

You can also express join using (>>=).

join m = m >>= id

You can think of the bind operator as a generalized way of sequencing functions.

I think the join function is easier to understand than the bind operator when you are 
just getting started though.

I hope this helps and that I didn't make any silly mistakes since I don't have a 
Haskell system at hands and can't double check the code. :)


    I think the join function is easier to understand than the bind operator when you 
    are just getting started though.

Agreed. Monads really are about fmap, join and return. >>= is just defined using 
fmap, join and return to capture a common use case. Since >>= tends to be more 
useful in practice than join, monad implementations usually define >>= directly 
in order to optimise it.


I think you have just described functors not monads specifically (although monads are 
functors too so it's right in that sense). I'm still learning myself so take what I 
say with a grain or two of salt. Monads I kinda get: they are sets of rules for 
composing functions. The monad threads the functions through the control structure it 
implements. The monadic functions (the lines in your "do" statement) can 
communicate with that control structure through monadic values. That's my best three 
line explanation right now. Can any more experienced haskellers verify?


Monads are captured by a library so are not a "pattern". Design patterns are 
characterized by not being capturable as libraries in the language they're used in.



Ah, that makes sense. I apologize.



I fear that what you get are Functors, not Monads yet.

The "create a copy of itself that has the same structure as the original, but 
each element in the copy is the result of a mapping function applied to the 
corresponding element of the original container" is exactly what Functors provide. 
See, e.g.:

http://stackoverflow.com/questions/2030863/in-functional-programming-what-is-a-functor

Every Monad is a Functor, but not every Functor is a Monad.


Coming from an imperative mindset, think of monads as something which allows you to 
inject code between each line you write. For C/C++ people, this means something like 
being able to overload ";"


When I started learning Haskell (not finished yet :) ) I tried to quickly get a grasp 
on Monad's understanding and it proved harmful to the learning process.

I understood monads when I started writing some code without thinking so much about 
them and realizing that I kept repeating the same pattern of composing functions. Then 
it occurred to me: Monads are just a way to write concise code while dealing with 
repetitions in code.


■_ Perl の可読性 (readbilty)


Randal L. Schwartz at blogs.perl.org: Perl's "readability"

Perl's "readability"

By Randal L. Schwartz on November 29, 2010 3:31 AM

You know, when I look at Russian Cyrillic, or Greek letters, it looks like squiggles. 
I've never studied it, so I have no means to relate it to sounds, let alone meanings.

So, when people say, "I can't read Perl", it only tells me they haven't 
studied it.

ですから、誰かが「わたしはPerl (で書かれたプログラム)を読めないよ」と言ったとき、
それはただ単に彼らが Perl を学んでいないだけなのだとわたしには聞こえるのです。

And if people choose to be vocal about their own ignorance, saying "Perl is 
unreadable!", that's saying a lot more about them than it does about Perl.

As far as I can tell, millions of people speak Greek and Russian. I'm not one of them, 
and that's ok. I don't keep saying "Russian is impossible", simply because I 
personally don't know it.

わたしが言えるのは、ギリシア語やロシア語を話す数百万の人がいるけれどもわたしはその
一人ではない。でもそれでよいのだということです。
I don't keep saying "Russian is impossible",
それはただ単にわたしがロシア語を知らないからなのです。

If it matters, I've seen some pretty impenetrable Python, Ruby, and Java code. And I 
even pretend to know those languages at least in passing.

■_

全部やってる余裕がない

Ruby is beautiful (but I’m moving to Python) ≫ All Things Progress

The Ruby language is beautiful. And I think it deserves to break free from the Web.
Unfortunately, I think the future of Ruby is firmly stuck in Web development, so I'm going
to invest in a new language. This is a look at the fantastic language I came to from Java.
It's also a (brief) glance at a potential substitute.

http://www.reddit.com/r/programming/comments/ecyef/ruby_is_beautiful_but_im_moving_to_python/

■_

Do You Enjoy Your Code Quality?
http://rubylearning.com/blog/2010/10/18/do-you-enjoy-your-code-quality/

How to pass member function to a function pointer? - Stack Overflow
http://stackoverflow.com/questions/4296281/how-to-pass-member-function-to-a-function-pointer

Hacker News | Which programming book you just couldn’t stop reading from start to end?
http://news.ycombinator.com/item?id=1944913

■_ with


C言語なら俺に聞け(入門編)Part 74 /a>
11 デフォルトの名無しさん [sage] 2010/11/27(土) 23:55:30 ID: Be:
    VBのwithみたいのを考えてるなら、Cにはないとしか言えない。 

12 デフォルトの名無しさん [sage] 2010/11/28(日) 00:43:34 ID: Be:
    うそ 

13 デフォルトの名無しさん [sage] 2010/11/28(日) 03:37:00 ID: Be:
    basic系のwithナツカシス
    いまwithといわれたらpythonのwithを連想するわ 

14 デフォルトの名無しさん [sage] 2010/11/28(日) 07:55:25 ID: Be:
    ->で連結されている形なら、途中までの->を他のポインタに代入して
    withの替わりのような事をさせるのは良くある 

15 デフォルトの名無しさん [sage] 2010/11/28(日) 12:04:30 ID: Be:
    でもどうしても1個は残るよね

    C++ならメンバ関数作れるけど 

16 デフォルトの名無しさん [sage] 2010/11/28(日) 12:10:36 ID: Be:
    メンバ関数があるからなんだと 

17 デフォルトの名無しさん [sage] 2010/11/28(日) 12:16:52 ID: Be:
    メンバ関数じゃなくても、纏めてアクセスする関数を作ればいいだけじゃねぇの。 

BASIC 系て。Pascal の立場ねーっ! って、Algolにもあったっけ?

2010年11月28日

■_

・早い、早いよ(ry
「シャキーン(`・ω・´)クッション」発売→2時間で売り切れ - アキバBlog ショボーンクッションの再入荷は12月下旬とか以前に見たような覚えがあるけど これは今週中にあるのかな。12月上旬とか言うのは。

えーと、何か書こうと思ってたことがあるはずなんだが…

■_

翻訳は難しいねという話

例外を正しく使えないプログラマ多いね。 その2 
587 仕様書無しさん [] 2010/11/22(月) 03:14:38 ID: Be:
    例外は高くつく
    そう、例外は高くつきます。だから絶対例外を使うべきではない、ということですか?

     もちろんです。では一体どんなときには 例外を使うべきで、どんなときには使うべき
    でないのでしょうか。残念ながら、答えは簡単ではないのです。今まで教わってきた、
    良きtry-catch式プログラム習慣を捨て去る必要は無いと言えるのですが、このやり方で
    は問題に突き当たってしまう場合があります。例外を生成するときです。
    http://www.ibm.com/developerworks/jp/java/library/j-perf07303/index.html 

589 仕様書無しさん [] 2010/11/22(月) 03:18:09 ID: Be:
    スタック・トレースを構築するにはランタイム・スタックのスナップショットをとる必要があり、
    それが高くつくのです。ランタイム・スタックは効率よく例外を生成するように作られてはおらず、
    ランタイムをできるだけ早く走らせるように作られているのです。無用なディレイなしに用をすま
    せるため、とにかくプッシュ・ポップ、プッシュ・ポップ。ところがExceptionを生成するとなると、
    JVMはこう言わなければならない。「止まれ! 写真を撮るからプッシュ・ポップをちょっと待っ
    てニッコリ笑って!」 スタック・トレースにあるのはスタックの要素一つか二つだけではありま
    せん。頭からお尻まで、行番号からなにから、あらゆる要素が入っています。もし深さ20のスタッ
    クに例外が生成されるとすると、先頭の数要素だけを記録しておけば良し、というようなオプショ
    ンはあり得ません。20全部を受け取ることになるのです。このスタックはmainもしくはThread.run
    (スタックの一番下)からずっと先頭までを記録しているのです。ですから例外の生成は高くつく
    のです。 

590 仕様書無しさん [sage] 2010/11/22(月) 03:23:38 ID: Be:
    コピペするのならこの文章もちゃんと書こうぜw

    > 幸い、例外を捕捉する代償はそう高いものではありません。
    > ですから心行くまでtry-catch手法を使えばいいわけです。
    > また下に示すように、パフォーマンスを低下させること無く、メソッド定義の中でthrows文を定義することも出ます。 

634 仕様書無しさん [sage] 2010/11/23(火) 17:53:57 ID: Be:
    >>587って典型的なyes/noの誤訳だよね
    原文リンク切れてるけど 

680 仕様書無しさん [sage] 2010/11/24(水) 11:29:36 ID: Be:
    >634
    原文。

    Exceptions are expensive
    Yes, exceptions are expensive. So does that mean you should never use them? Of course
    not. But when should you use exceptions and when shouldn't you? Unfortunately, there's
    no simple answer.

    Eye on performance: Improve your development processes
    http://www.50001.com/language/javaside/lec/java_ibm/Eye%20on%20performance%20%C7%E2%BB%F3%B5%C8%20%B0%B3%B9%DF%20%C7%C1%B7%CE%BC%BC%BD%BA%20(%BF%B5%B9%AE).htm

    Of course not. が訳せないってかw 

681 仕様書無しさん [sage] 2010/11/24(水) 12:21:19 ID: Be:
    >>680
    neverがあるから否定疑問文だと勘違いしたんだろ。
    ありがちで、馬鹿にするほどでもない。 

682 仕様書無しさん [sage] 2010/11/24(水) 12:40:53 ID: Be:
    >>681
    なるほど。 Of couse you should not use them. ともとれるというわけか。
    もっとも、それじゃその先の意味が通らないけどね。
    使っちゃいけないなら「使うべき場合と使うべきではない場合」の区別なんて意味がないもの。 

683 仕様書無しさん [sage] 2010/11/24(水) 20:37:25 ID: Be:
    >>682
    いや、中学ちゃんと卒業できていれば、
    No, it does NOT mean you should never use them.
    という意味だとわかるよねえ。

このスレは相変わらず流量があるなあ。

■_

組み込みプログラマー雑談スレッド その17 
541 仕様書無しさん [] 2010/11/27(土) 03:04:25 ID: Be:
    分数理解できないくらい算数苦手なんですがプログラマーとして成功したいです。
    できれば半年以内で月収50万円くらい稼げるよになりたいんですが方法論を教えてください。
    ちなみにパソコンの知識自体が皆無です。 

542 仕様書無しさん [sage] 2010/11/27(土) 04:17:24 ID: Be:
    コンサルの方がいいんじゃないの 

543 仕様書無しさん [sage] 2010/11/27(土) 04:47:29 ID: Be:
    >>541
    自分でプログラムを書かないこと 

544 仕様書無しさん [sage] 2010/11/27(土) 06:51:21 ID: Be:
    >>541
    何でも出来るとハッタリして、
    しむまで残業出来れば、
    年600万円ぐらい行くだろ。

    来年は無いかもしれんが。 

545 仕様書無しさん [sage] 2010/11/27(土) 07:14:43 ID: Be:
    >>541 湖か海にでかけ、ふんどし一丁で泳げ。
    そこから開けてくる何かをつかんだらまたこい。 

546 仕様書無しさん [sage] 2010/11/27(土) 08:40:48 ID: Be:
    >>541
    経営者になれ 

547 仕様書無しさん [sage] 2010/11/27(土) 08:43:21 ID: Be:
    組込みやめて病院の事務やってる友達がいるけどかなり楽らしい
    俺もそういうところにコネがあれば辞められるのにな 

548 仕様書無しさん [sage] 2010/11/27(土) 08:46:37 ID: Be:
    まず分数を理解することか始めましょう。 

まあ八割方釣りな気もするけど、この業界にいいイメージ持ってる人って少なくないのかねえ。

■_ 少佐

おもしろいコピペがあったら貼るスレinマ板part22 
45 仕様書無しさん [sage] 2010/11/27(土) 23:36:24 ID: Be:
    ≪先輩からのメッセージ≫

    諸君私は組込が好きだ
    諸君私は組込が大好きだ

    回路図が好きだポート割り付け表が好きだタイミングチャートが好きだ試作基板が好きだ
    ICEが好きだスタートアップルーチンが好きだ割込みが好きだアセンブラが好きだC言語が好きだ

    4bitで8bitで16bitで32bitで64bitでCISCでRISCでDSPで
    この地上で行なわれる、ありとあらゆる組込プログラミングが好きだ

    勝手知らないMPUのスタートアップルーチンを書くのが好きだ
    チップの初期化を終えMainループまで到達した時など心がおどる

    並べられたLEDが想定通りなタイミングで光り輝くのが好きだ
    ロジアナに映し出された複数のポートがタイミングチャートの如くパタパタしていた時など胸がすくような気持ちだった

    チップ内蔵のバスが外部チップと繋るのが好きだ
    試行錯誤を超えて外部チップから仕様書通りの反応を引き出している様など感動すら覚える

    経験不足の新人が訳のわからない現象に悩まされている様などはもうたまらない
    オシロで接続したポートのチャタやなまりを指摘してハード設計者が回路図を見ながら
    言い訳しつつ回路を修正するのも最高だ

46 仕様書無しさん [sage] 2010/11/27(土) 23:37:30 ID: Be:
    未熟なプログラマが組んだタイマ割り込み処理が区間時間を超えて処理するのを是正した時など絶頂すら覚える

    想定外の割り込みでシーケンスが滅茶苦茶にされるのが好きだ
    必死で守るはずだったMain処理が蹂躙されプロセスが殺されていく様はとてもとても悲しいものだ

    SIerの物量に押し潰されてコンペで負けるのが好きだ
    人月の限界に追いまわされテスト要員のように地べたを這い回るのは屈辱の極みだ

    諸君私は組込を地獄のような組込を望んでいる
    諸君私に付き従う組込er諸君
    君達は一体何を望んでいる?
    更なる組込を望むか?
    情け容赦のない糞のような組込を望むか?
    鉄風雷火の限りを尽し三千世界に鴉(カラス)を殺す 嵐の様なプログラミングを望むか?

    「組込!!組込!!組込!!」

    よろしい
    ならば組込だ 

47 仕様書無しさん [sage] 2010/11/27(土) 23:38:21 ID: Be:
    大組込を!!
    一心不乱の大組込を!!

    我らはわずかに10人に満たぬプログラマに過ぎない
    だが諸君は一騎当千の古強者だと私は信仰している
    ならば我らは諸君と私で総兵力1万と1人のプログラマ集団となる

    我々を忘却の彼方へと追いやり眠りこけているアプリ・プログラマを叩き起そう
    髪の毛をつかんで引きずり下し眼を開けさせ思い出させよう
    連中にアーキテクチャの味を思い出させてやる
    連中に1usecがどれほどの時間かを思い出させてやる
    割込みとデバイスのはざまには奴らの哲学では思いもよらぬ事がある事を思い出させてやる
    一千行のアセンブラでシステムを燃やし尽してやる

    全ICE発動開始コンパイラ始動
    目標!!全デバイス制覇MPU稼働率100%

    征くぞ諸君

    ttp://www.bee-u.com/techmsg.html 

48 仕様書無しさん [sage] 2010/11/27(土) 23:58:52 ID: Be:
    よくもあの長文を改変したものだと感心した 

人数が10人になってたりするのは芸が細かいなw

■_

みねこあさんあたりも引きずり込もう ;)


『見習いプログラマ(中略)10冊』を書いた理由と、更に読んで欲しい5冊 : ソースコードは飲み物です。

(2)頂いたご意見に対して

特にご意見の多かった『オブジェクト脳のつくり方』と『憂鬱なプログラマのためのオブジェク
ト指向開発講座』について言及したいと思います。


・『オブジェクト脳のつくり方』について

「この本はプログラムを現実世界のものに例えているから駄目だ。幼稚だ。実際にコード触らな
いとオブジェクト指向をわかるわけがない。データ型だって最初から教えろ。」

とおっしゃられる方が何人かいらっしゃいました。
その『例え』の部分に関しては色々な意見があると思います。
(僕は初心者が学ぶ際には良いと思っています。が、わからなくはないです。)
ですが、『だからこの本は駄目だ。』と言うのは言いすぎだと思います。

この本の真価は、その『例え』から入って、デザパタの本質のわかりやすい説明、簡単なUMLの
説明、実際のシナリオからUMLを使った設計方法、と体系的に記載されている点でしょう。

非常に実務に沿った内容で、初心者の方が仕事をどういう風に進めて行くかを学ぶ際のチュート
リアルとして優れていると思います。


・『憂鬱なプログラマのためのオブジェクト指向開発講座』について
C++をメインに使われている方には、非常に不評のようですね。
確かにポリモーフィズムの使い所やら怪しい箇所は何点かあります。
ですが、僕がオブジェクト指向について学び始めた頃に読み、
当時凄く悩んだことに答えてくれた本でした。

シューティングゲームで、自機がミサイルを打ち、敵機に当たった際の判定について考えて下さい。
ミサイルの当たり判定をするメソッドがあるべきなのは、どのクラスでしょう?

ミサイルが敵機に当たった際には、ミサイルと敵機が消滅しますが、ミサイル・敵機を消滅させ
るメソッドはがあるべきなのは、どのクラスでしょう?

もちろん、プログラムを書き慣れている人なら、『何当たり前のこと言ってんだよ』って思われ
るかもしれません。

でも学び始めの人は(いや、ある程度慣れてきていても)クラスの責務について迷うことは多い
はずです。

その考え方をゲームを題材としてわかりやすく学べた書として、お勧めしました。


・だったら最初から↑の説明書けよ
だって、どーせ身内2・3人にしか読まれないと思ってなかったんだもん。。。

この二冊の本の内容についてはみねこあさんに丸投げするとして、 ってすでに書いてた? みねこあ

今は逆で、良い書籍の情報が山ほどあります。
ありすぎて、やっぱりどれ読めばいいかわからなくて困るんだろうな、
有名なプログラマさんが薦める本は難しすぎるんじゃないかな、と。

こっちもかっw

みねこあ

初心者の感じる「わかりやすい」って、実のところ単に「読みやすい」でしかなかったりします。
だから「読みやすい」は「役に立つ情報」と関係ないし、初心者が読んだ印象だけではそれが良
書か悪書かを判断できません。

でまあ何人かの人がそれぞれに挙げた十冊なりの中の具体的にどの本が 「難しすぎる」のかよくわかりませんが (想像できなくもないけど)、 そういう本にしても無用に難しいわけではなくて(いやまあ例外はあるだろうけど) そもそもそういう知識を得て自分のものにするということが難しいことだと思います。 だから、これというものには頑張って取り組んでほしいですね。

■_

あー、英語記事に手を出している時間的余裕がナッシング (斜め読みくらいはしている)

The Ruby Stdlib is a GhettoThe Ruby Stdlib is not a Ghetto ときて


Ruby Stdlib is a Ghetto, Pt. 2

Ruby Stdlib is a Ghetto, Pt. 2

November 25th, 2010 · 9 Comments

Eric Hodel disagreed with my recent point. I didn't present much of an argument 
because I didn't think there was much disagreement with my point. Let me elaborate.

1) It's full of unnecessary libraries that should be separately distributed
分割して配布すべき不必要なライブラリの塊になっている

The Ruby community, at least in the US, has proven to be very open to change, see 
Rails 1, 2 and 3 for example. Sometimes you have to break compatibility to advance the 
state of the art. Continuing to bundle inferior implementations means that we have 
this compatibility albatross around our neck while stronger third-party libraries don't
pop to the top of the ecosystem. Some random dude said it better than me. Some other 
dude agreed, REXML in this case should be unbundled.

Rails 1、2、3を例に取ると、少なくともアメリカのRubyコミュニティでは変化に対して
オープンであるように見えます。state of the art を advance するために互換性を
破らなければならないこともあります。inferior implementations をバンドルし続ける
ということは

I was proposing unbundling DRb and Tk not because their codebase sucks but simply 
because they aren't used by the vast majority of the Ruby community. treetop and 
shoes are very useful libraries also but they don't belong in stdlib either.

わたしはDRbとTk のバンドルを止めることを提案します。
なぜならこれらのコードベースは sucks but simply であるからです。
それは、これらがRubyコミュニティの vast majority (大多数)に使われているわけではないからです。
treetop と shoes は非常に有用なライブラリではあるのですが、
同時に

I'm not proposing we do this in the next 1.9.2 patch, but for 2.0, sure. Now that 
rubygems is in core (thanks Eric!), I think we should be aggressive in unbundling 
everything that can be unbundled.

わたしはこれを1.9.2の次のパッチでやれと提案しているのではなく、2.0でやろうと
提案しています。いまや rubygems はコアとなりましたから(Ericありがとう!)、
わたしたちはアンバンドルできるものはどれでも積極的にアンバンドルすべきだと
わたしは考えているのです。

2) It's (still) too hard to contribute
貢献するのが困難

The Net::HTTP docs haven't been touched AFAICT in 5 years. They're full of broken English
and rudimentary examples. I hear people complain about it all the time, why hasn't anyone
fixed it? Maybe everyone is lazy or maybe the contribution process remains too steep for
most.

Net::HTTP had performance issues in the 1.8.6 era, sounds they have been fixed. The 
API is still poor and poorly documented IMO. Just about every HTTP library has a 
better API IMO, e.g. Typhoeus, httparty and rest-client. As someone else pointed out, 
Ruby really does need an http API in core though, if not just for Rubygems to use.

I would love to see ruby-core treat git as a first class citizen and allow pull requests
and git email patches against http://github.com/ruby/ruby. If this is the case today,
please let me know. I will be the first to submit a pull request for better net/http docs.

© 2006–2010 Mike Perham — Cutline by Chris Pearson

添付のライブラリが多すぎる(必要になったらネットから取れるようにしとけばいいじゃん) というのはまあ納得できなくもないけど、 1.8が出始めの頃から比べるとかなり変わったような印象が (たしかできるだけ充実させようという方針だったような)。

■_

2010年11月27日

■_

・shibuya.lisp#6
懇親会で ILC を日本に招致しようとか何とか言う話が(ニュアンスがちょっと違うか>招致)。

比較するようなことじゃないけど、LT で深町さんが主張したようなことは Boost勉強会で言う人(と実行する人)がいてもいいんじゃないかなあ。 Shibuya.lispで「Lispで仕事をするために」というLTをしました - 八発白中

■_ 十冊

まとめようかと思ったら、ム板で発見w


推薦図書/必読書のためのスレッド 59 
905 デフォルトの名無しさん [] 2010/11/27(土) 08:25:59 ID: Be:
    ・全てのプログラマが読むべき本ベスト10
    http://www.tommyjp.com/2010/11/blog-post_5447.html
    ・見習いプログラマが読んだら、すぐにジョブレベルが上がる10冊
    http://blog.usagee.co.jp/2010/11/23/level-up-programmer
    ・見習いプログラマが読んでも、ほとんど無意味な10冊
    http://d.hatena.ne.jp/JavaBlack/20101124/p1
    ・技術力をあげたいプログラマが読んでおかないと話にならない本10冊
    http://d.hatena.ne.jp/nowokay/20101125
    ・プログラマならいつかは読んでおきたい(と言っておけばかっこいい)本10冊
    http://d.hatena.ne.jp/nowokay/20101126/1290732424
    ・腐る前にプログラマが読めばよく発酵すると思われる10冊
    http://d.hatena.ne.jp/kambk/20101125/1290641139
    ・けなくのプログラマが読むべき本10冊
    http://d.hatena.ne.jp/kennak/20070509/1178766259
    ・お仕事の役に立たないけどとても面白い本5冊
    http://d.hatena.ne.jp/authorNari/20101125/1290693116
    きれいなソースコードを書くために読んでおくべき本10冊
    http://d.hatena.ne.jp/higayasuo/20101126/1290766099

タイミングの問題かこれはなかったけど。 プログラマがなんたらかんたらな10冊 - kagamihogeのblog ここまで「よくわかる現代魔法」挙げる人出てなかったのね。

■_

渋谷の丸善(ジュンク堂と同じフロアにあるあそこ)で見たなあ >ブックストッパー


推薦図書/必読書のためのスレッド 59 
908 デフォルトの名無しさん [sage] 2010/11/27(土) 11:01:40 ID: Be:
    分厚い本開くときにページをとめる道具っていいのないかな?
    両手をフリーにしてスタバあたりでゆっくり読みたい時に使いたい

909 デフォルトの名無しさん [sage] 2010/11/27(土) 11:12:27 ID: Be:
    ブックストッパーが良いよ。 

910 デフォルトの名無しさん [sage] 2010/11/27(土) 11:13:48 ID: Be:
    裁断して必要な部分だけ持ち歩けばいいよ 

911 デフォルトの名無しさん [sage] 2010/11/27(土) 11:15:53 ID: Be:
    >>909
    有隣堂で探してみる

    >>910
    ×

912 デフォルトの名無しさん [sage] 2010/11/27(土) 11:17:01 ID: Be:
    amazonでブックストッパーやブックスタンドで検索
    ttp://www.amazon.co.jp/dp/4902756064
    これは金属部分があるから錆びますって注意書きが箱の中に入ってる
    本は自分の重さで開くので一つあれば十分

    ttp://www.amazon.co.jp/dp/B001A1V9R6/
    これは薄い本は良かったけど、厚い本は上にあるブックストッパーで
    閉じようとする本の力を相殺してやらないとダメだった

    500ページ超えが多々あるプログラミング系の本を使うならブックストッパーだな 

913 デフォルトの名無しさん [sage] 2010/11/27(土) 11:18:44 ID: Be:
    プログラミングの本ってみんな厚いから困るんだよね 

914 デフォルトの名無しさん [sage] 2010/11/27(土) 11:22:15 ID: Be:
    サンプルコード打つのが大変 

915 デフォルトの名無しさん [sage] 2010/11/27(土) 11:32:49 ID: Be:
    夫婦喧嘩とかであの分厚い本を武器に取られたら撲殺される自信がある 

■_ Include licensing info in linker sections

リンカーで扱うセクションにライセンス情報を持たせるとか何とか


Half-baked ideas: Include licensing info in linker sections « Richard WM Jones

I had this idea when we were discussing the complexity of tracing the licensing of 
gnulib modules in libraries. It’s quite easy with gnulib to accidentally include a 
GPL module in your library that would otherwise be LGPL, thus (in theory — I don't 
want to go into the legal arguments) “infecting” your LGPL library.

Here’s the idea: In each source file (or gnulib module or whatever is a convenient 
“licensing unit”) include a linker section describing the license. When the final 
library or binary is compiled, you can trivially see whether it includes the wrong 
licenses or mixes licenses inappropriately.

Here is how you do it. In each source file, add a line like this:

/* This library is GPL 3+. */
static int lib1_gpl3p __attribute__((section ("LICENSES")));

When you statically link a program or library, use readelf or objdump to reveal the 
licenses of the libraries it was linked against:

プログラムやライブラリをスタティックリンクした場合には
readelf や objdump を使ってリンクされたライブラリのライセンスを
見ることができる。

$ objdump -j LICENSES -t prog

prog:     file format elf64-x86-64

SYMBOL TABLE:
00000000006008dc l d  LICENSES	0000000000000000 LICENSES
00000000006008dc l  O LICENSES	0000000000000004 main_gpl3p
00000000006008e0 l  O LICENSES	0000000000000004 lib1_gpl3p
00000000006008e4 l  O LICENSES	0000000000000004 lib2_lgpl2p

(Dynamic linking is a little bit different: you’d add the same information to the 
header, or have to write a small tool which chased through the dependencies from ldd 
enumerating the licenses).


んー、どうなんだろう。 面白いアイデアとは思うけど。

■_ 捕獲

正規表現の ( ) の話ですが。

正規表現 Part7 
674 デフォルトの名無しさん [sage] 2010/11/26(金) 21:41:35 ID: Be:
    ●正規表現の使用環境
    C#2010
    ●内容
    IsMatchで"(A|B)"のような比較をしたいんですが、
    この場合キャプチャしないよう"(?:A|B)"と書くべき
    なんでしょうか?

675 デフォルトの名無しさん [sage] 2010/11/27(土) 06:59:15 ID: Be:
    メモリやパフォーマンスが多いに改善される局面ならすべきなんじゃねーの
    そうでないなら気にするな 

676 デフォルトの名無しさん [sage] 2010/11/27(土) 17:31:24 ID: Be:
    >>674
    後で使うならキャプチャー、使わないなら(?:で
    他人の書いた正規表現をメンテする場合、うかつキャプチャーすると後方参照
    の順番が狂ったりするし、キャプチャーする必要がなければしないようにしてる 

677 デフォルトの名無しさん [sage] 2010/11/27(土) 23:58:46 ID: Be:
    >>675,676
    ありがとう。
    完全に関数内のみで使う予定だったので
    とりあえずそのままにしておきます。

    単純なis系の関数なのでキャプチャさせないだけで
    ほんの少しでもパフォーマンスが上がるならと考えてました。

カッコのネストをしたりするのでなければ、気にすることはないんじゃないかなあ。 チリツモで影響は出るんだろうけど、簡単な正規表現であれば 気にするほどの性能差はでないような気がする(要出典)。 キャプチャの必要がないのなら、キャプチャしないカッコで統一するってのもありかな。

■_

■_

shibuya.lisp#6 のことは一晩寝かせてから改めて書く。かどうかは保証の限りではありません :)

2010年11月26日

■_

・聴きたい
http://mainichi.jp/enta/photo/news/20101126mog00m200020000c.html?inb=fe が、20時からでは某イベントに行っとりますがながな。

・最終号
月刊ベイスターズ最終号の表紙は筒香でした。 未来への期待と見るべきかどうか。

■_

解決したのはいいんですが(別): つらつらぐさ http://mumrik.air-nifty.com/blog/2010/11/26_wupermission.html

■_ けんろん!

いけがみさんの話では step1 からして「堅い」そうで。

step2 で挙げられている本、途中まで読んで放置中だわ ○| ̄|_


Category theory for Haskell programmers | Geoff Hulette

Category theory for Haskell programmers
Haskellプログラマーのための圏論

Here is some advice, gained through my own trial and error, on how to teach yourself 
basic category theory.  This advice will probably be useful only if you are like me, 
i.e. a computer scientist and Haskell programmer without a strong background in 
advanced math.

The development of category theory was motivated by problems in the mathematical field 
of abstract algebra, and most of the literature assumes that you come from this 
background. What little knowledge I have of groups, rings, fields, and so on was 
stretched and then quickly broken by the examples in mathematically-oriented textbooks 
(e.g. Mac Lane).  I decided I needed a different approach.

圏論の development は抽象代数という数学の分野における問題に関することが動機でした。
そしてそれはあなたがその方面の知識を持っていることが仮定されているものです
#ちょー訳
わたしが持っていたわずかな知識は群 (groups)、環 (rings)、体 (fields) といったものの
延長で、数学指向の教科書 (例の黄色い本とか) にあった例題によって即座に
粉砕されてしまうようなものでした。

So, here is how I acquired the basics:

Step 1:  Read Brent Yorgey's excellent Typeclassopedia. Besides being a great 
intermediate Haskell tutorial and guide to the standard libraries, it will make you 
understand why programmers should care about category theory.

Brent Yorgey's excellent Typeclassopedia を読む。
これは great intermediate な Haskellチュートリアルとその標準ライブラリの
ガイドであり、あなたにプログラマーがなぜ圏論に関心を持つべきかについて理解させるでしょう。

Step 2: Work through Benjamin Pierce's Basic Category Theory for Computer Scientists. 
Although frequently criticized for its terseness, this book is one of the few resources
available that anchors the abstract notions of category theory to concrete and accessible
topics in computer science.

Benjamin Pierce の Basic Category Theory for Computer Scientists を work through する。
Although frequently criticized for its terseness,
this book is one of the few resources available that
anchors the abstract notions of category theory to concrete and accessible topics in computer science.
この本は数少ない入手可能なリソースの一つです
圏論の抽象記法を

Step 3: Supplement Pierce with Eugenia Cheng's excellent tutorial videos. I recommend 
reading a section in Pierce and then watching the relevant videos. This combo worked 
really well for me.

Step 4: It may help to have a look at the category-extras package on Hackage. For 
example, I found the source code for the Control.Functor.Adjunction module helpful in 
understanding adjunctions.  Simply reading the type annotations can provide intuition.

Pierce's book ends with adjunctions which are, unfortunately, where monads begin. By 
this point, however, I was comfortable enough with the basic concepts to move on to an 
advanced textbook (namely Mac Lane, see below).

You may be tempted to start with Saunders Mac Lane's Categories for the Working Mathematician.
This is pretty much the definitive text on category theory, but unless you have a firm
grasp of abstract algebra you may find it tough going. Until I understood the basic
ideas, I found it utterly impenetrable.

At the other end of the spectrum is Conceptual Mathematics: A First Introduction to Categories
by F. William Lawvere. This book starts with very basic foundations and is easy to follow.
It does a good job of motivating category theory through examples (although not from computer
science).  I found that it moved a bit too slowly.

If you know of any other good resources for mathematically-impaired computer 
scientists trying to learn category theory, please leave a comment below.


   1. Aaron Culich says:
      November 23, 2010 at 6:16 pm

      Category Theory for Computing Science by Michael Barr & Charles Wells. It is 
      out of print but if you write to CRM Books at the Université de Montréal you can
      order copy for CAN$45 + shipping/export fees (at least that is what was
      last quoted to me).

          * Eckart says:	
            November 23, 2010 at 11:56 pm	

            There also is a PDF version based on the book available here :
            http://folli.loria.fr/cds/1999/library/pdf/barrwells.pdf

            (via wikipedia)

   2. solrize says:	
      November 23, 2010 at 6:56 pm	

      Haskell Wikibook is a good place to start:

      http://en.wikibooks.org/wiki/Haskell/Category_theory

(略)

■_

2010年11月25日

■_

・ダムエー
…どうなるんだ THE ORIGIN…

http://togetter.com/li/72809 http://atnd.org/events/10310 http://d.hatena.ne.jp/rofi/20100417/1271519352 http://d.hatena.ne.jp/nowokay/20101126#1290732424 プログラマならいつかは読んでおきたい(と言っておけばかっこいい)本10冊 http://dpo.gbrandl.de/whatsnew/3.2/ http://detail.chiebukuro.yahoo.co.jp/qa/question_detail/q1051029305 http://www.amazon.co.jp/exec/obidos/ASIN/B004ASOL7Q/

■_ Ruby 入門者へのアドバイス

redditから。


Advise for Ruby Beginner : ruby

I am a system administrator new to programming and ruby, interested in learning both 
ruby and rails, to automate and build some web applications to aid my working place. I 
would like to have advice for the detail path from ruby to rails from experience 
programmers. I am confused on version 1.8 or 1.9. I use ubuntu 10.04 LTS on my servers.

Regards

Might as well start on ruby 1.9 if you don't have any legacy issues.

Learning ruby:
http://www.pragprog.com/titles/ruby3/programming-ruby-1-9

Learning rails:
http://www.pragprog.com/titles/rails4


Plus, you can install multiple versions of Ruby and, I'm pretty sure, manage and 
specify them per app with RVM. Therefore negating any legacy issues with previous apps 
already running.

At least I think so, please someone correct me if I'm wrong.


I suggest starting out with Ruby Koans, 1.9. They are a really fun and motivating way 
to start off with Ruby! It gives you a great overview of the language.

And then afterwards moving on to the things your other fellow Reddits suggested!

Best of luck!


If you're just looking to build small apps for workplace, I'd run through the ruby koans,
http://rubykoans.com/. Then play around with Sinatra, http://www.sinatrarb.com/. 
For small apps Sinatra is much easier to manage, understand, and get started with than 
rails. Even if it turns out that you do need something as complex as rails, building 
from the ground up with Sinatra will give you a good idea of what rails is doing 
behind the scenes.


Learn the difference between advice and advise.


If you want to be future proof then go with Ruby 1.9 however there aren't many 
differences in the syntax and the default system packages (for both Linux & OSX) 
are 1.8.7 so you may want to start with 1.8 so you don't get bogged down with having 
to setup your dev box from the off.

Learn at least a bit of ruby so you start to get an idea of how it works (I think this 
is for 1.8):

http://ruby-doc.org/docs/ProgrammingRuby/

Latest version of the book is here (for 1.9):

http://pragprog.com/titles/ruby3/programming-ruby-1-9

And then get a copy of:

http://pragprog.com/titles/rails4/agile-web-development-with-rails

Get a project and spend a week creating your first proper rails app.

Make sure you have your project in [git/svn/source control system du jour] and then 
read up on Capistrano for deployment:

https://github.com/capistrano/capistrano/wiki/Documentation-v2.x

Profit! :)

At least that's how I did it!


Rails is not necessary to learn Ruby. In fact, I'd advise against it. Learn the 
language before a specific framework.

Yep, hence I said learn some Ruby first.

From my point of view the best way to learn a language is to do a project in it; 
you'll have some high's & lows but by the end you'll have a good idea of what it 
can do and whether you like it or not. I loved the look of Ruby when I first saw it in 
the pickaxe book but for me it didn't really hit home until I did a project in it for 
me that first project was in Rails.

In my opinion, if you are a web developer Rails makes sense as to learn early as 
generally it just works out of the box, there is a lot of documentation/blogs/books 
written about it and it gives you a really good idea of what you can achieve in Ruby - 
as well as what a kick-ass web framework should do.

Obviously if you aren't interested in web development then you might be better off 
looking at a different packages or even languages suited to what you wish to learn. 
e.g. if you I was a game programmer and interested in learning lua I would download 
something like http://love2d.org/ and make a game with it.

Frameworks can give you a good understanding of what you can do with a language, of 
course, some people will confuse the language with the framework, but if you are still 
interested in the language after you've created something in it you'll have that 
desire to understand the language better.

公案かあ。

■_ 5→6

だいぶ違う


Best Of Perl 6 Tablet / Perl 6

Contents

    * Command Line
    * File IO
    * Automatic multithreading
    * Comparsion
    * Case construct
    * powerful for loops
    * named parameters in subroutines
    * Objects with auto generated new and getters and setters


This is a small tour, showing the best features and improvements of Perl 6 in short 
examples, compared to similar working Perl 5 examples.

Command Line

Making output will become simpler and easier for newbies.

               Perl 5                                     Perl 6 
 print "bananas are good\n";                     say "bananas are good";
 print "and I said: $quotes{\"me\"}\n";          say "and I said: %quotes{"me"}.";
 print "and I said: $quotes{\"me\"}\n";          say "and I said: %quotes<me>.";
 print "What is ... ";                           $result = prompt "What is ... ";
 chomp($result = <>);


File IO

File::Slurp is in the Perl 6 core language and file reading is simpler then ever
(and autochomp included).

               Perl 5                                     Perl 6 
 $content = do { local $/;                       $content = slurp "poetry.txt";
    open my $FH, "poetry.txt"; <$FH>
 };

chomp(@content = do {                            @content = lines "poetry.txt";
    open my $FH, "poetry.txt"; <$FH>
});


Automatic multithreading

Applying operations to junctions and arrays is now syntactically compact and readable. 
Perl 6 will create threads where appropriate to use multiple processors, cores or 
hyperthreading for high level language SIMD concurrent processing.

ジャンクションや配列に対する操作の適用は、現在は構文的にコンパクトで読みやすいもの
になっています。Perl 6 は 高水準のSIMD concurrent processing のために
マルチプロセッサやマルチコア、ハイパースレッディングを使うのに適切な
スレッドを生成します。


               Perl 5                                     Perl 6 
 my $sum;                                        my $sum = [+] @numbers;
 $sum += $_ for @numbers;
 for (0 .. $#factor1) {                          @product = @factor1 >>*<< @factor2;
   $product[$] = $factor1[$] * $factor2[$_];
 }


The Perl 5 code is a simplification, of course Perl6 "does the right thing" when the
arrays have different lengths.

Perl 5のコードは単純で、
配列の長さが異なるときに Perl 6 のコードももちろん「正しく処理を行い」ます。

Comparsion

Here are junctions, then chained comparison operators.

               Perl 5                                     Perl 6 
 if ($a == 3 or $a == 4 or $a == 7) {...}        if $a = 3 | 4 | 7 {...}
 if (4 < $a and $a < 12) {...}                   if 4 < $a < 12 {...} 
 if (4 < $a and $a <= 12) {...}                  if $a ~~ 4^..12 {...}
 $a = defined $b ? $b : $c;                      $a = $b // $c;


The defined-OR operator eases lot of cases where Perl 5 newbies could fall into traps.
defined-OR 演算子は、Perl 5 newbies がはまりやすかった罠の多くを扱いやすくします。

Case construct
case構文
               Perl 5                                      Perl 6 
                                                     given $a {
 if ($a == 2 or $a == 5) {...} }}                      when 2 | 5 {...}
 elsif ($a == 6 or $a == 7 or $a == 8 or $a == 9) {}   when 6 .. 9 {...} 
 elsif ($a =~ /g/) {...}                               when 'g' {...}
 else {...}                                            default {...}
                                                     }


It's clear to read, very versatile and when used in combination with junctions, 
becomes even clearer.

powerful for loops

               Perl 5                                     Perl 6 
 for my $i (0..15) {...}                         for ^16 -> $i {...}
 for (my $i=15; $i>1; $i-2) {...}                for 15,*-2...1 -> $i {...}
 for my $key (keys %hash) {                      for %hash.kv -> $key, $value {
   print "$key => $hash{$key}\n"; ...              say "$key => $value"; ...
 for my $i (0..$#a) {                            for zip(@a; @b; @c) -> $a, $b, $c {...}
   my $a = @a[$i];
   my $b = @b[$i];
   my $c = @c[$i]; ... 


named parameters in subroutines

               Perl 5                                     Perl 6 
 sub routine {                                   sub routine ($a, $b, *@rest) {...}
   my $a = shift;
   my $b = shift;
   my @rest = @_;
 }


Objects with auto generated new and getters and setters

Simple Object creation is now as easy as it gets.

               Perl 5                                     Perl 6 
 package Heart::Gold;                            class Heart::Gold {
                                                   has $.speed;
 sub new {                                         method stop { $.speed = 0 }      
   bless {speed => 0 }, shift;                   }  
 }                                               
                                                 my Heart::Gold $hg1 .= new;
 sub speed {                                     $hg1.speed = 100;
   my $self = shift;                             my $hg2 = $hg1.clone;
   my $speed = shift;
   if (defined $speed) { $self->{speed} = $speed }
   else { $self->{speed} }
 }

 sub stop {
   my $self = shift; 
   $self->{speed} = 0;
 }


The new, getter, setter and clone methods are auto generated. Mthods now are called "method".

■_

Certificate って試験みたいなもん?


Perl Programming Certificate -- O'Reilly School of Technology : perl

O'Reilly has announced an online Perl Programming Certificate series of four courses. 
I would like to learn perl in my spare time, have worked through all of the problems 
in Learning Perl and several chapters into Intermediate Perl. Is there an advantage of 
this series compared to continuing through book exercises with the help of the Perl 
Monks? Advice welcome. Thanks.

■_

2010年11月24日

■_

・うっちー
村田が残留して、二人共は無理だからうっちーに冷たくしたとかいう説はどうか>球団社長

・「読むべき」本
今日一部で? 盛り上がった はてなブックマーク - 全てのプログラマが読むべき本ベスト10: とみー という話題がありまして。 ブックマーク対象の元記事では stackoverflow のあるスレッド(という呼び方でいいんだろうか)に 寄せられた本を単純に挙げた人の多さでベスト10としたみたいですが、 それはどうなんでしょうね。確かにそれだけ人気がある(→読むべき) となるのかも知れませんが、 一人二人しか挙げていないような本にも目を向けるべきものがあると思います (つか、「不思議の国のアリス」を複数人が挙げているのはなんなんだ)。

でまあ大元の質問

What is the single most influential book every programmer should read? - Stack Overflow

If you could go back in time and tell yourself to read a specific book at the 
beginning of your career as a developer, which book would it be?

I expect this list to be varied and to cover a wide range of things. For me, the book 
would be Code Complete. After reading that book, I was able to get out of the 
immediate task mindset and begin to think about the bigger picture, quality and 
maintainability.

にわたしが答えるとしたら、
珠玉のプログラミング―本質を見抜いたアルゴリズムとデータ構造

プログラミング作法
かなあ。 いくらなんでも プログラム書法 第2版 ソフトウェア作法 この辺は時代的にもきついし(って過去にさかのぼって。だからいいのか?)。

某氏に読ませるべき100冊はまた。

arton さんや shiro さん、まつもとさんといった方々がどういう本を挙げるのか知りたい気もする (他にも色々な方の名前を挙げたいところですが切りがないのでとりあえずこのお三方)。

■_

Ruby 初心者スレッド Part 39 
625 デフォルトの名無しさん [sage] 2010/11/24(水) 08:32:47 ID: Be:
    Pythonは正規表現をなんとかしてほしい 

626 デフォルトの名無しさん [sage] 2010/11/24(水) 13:19:26 ID: Be:
    スレチだが、新しいエンジンに入れ替えるという話が進んでるみたいよ> Pythonの正規表現
    ttp://bugs.python.org/issue2636 

627 デフォルトの名無しさん [sage] 2010/11/24(水) 13:46:38 ID: Be:
    せめて向こうに張れや
    みんな両方チェックしてるんだから 

628 デフォルトの名無しさん [sage] 2010/11/24(水) 16:05:40 ID: Be:
    エンジンどうこうより、あのreをどうにかしてほしい 

629 デフォルトの名無しさん [sage] 2010/11/24(水) 16:24:24 ID: Be:
    おでかけですか? 

630 デフォルトの名無しさん [] 2010/11/24(水) 18:48:10 ID: Be:
    git help rerere

というのが目に付いたので、626 のリンク先へ。


Issue 2636: Regexp 2.7 (modifications to current re 2.2.2) - Python tracker

msg65513 - (view) 	Author: Jeffrey C. Jacobs (timehorse) 	Date: 2008-04-15 11:57 	

I am working on adding features to the current Regexp implementation,
which is now set to 2.2.2.  These features are to bring the Regexp code
closer in line with Perl 5.10 as well as add a few python-specific
niceties and potential speed-ups and clean-ups.

I will be posting regular patch updates to this thread when major
milestones have been reach with a description of the feature(s) added. 
Currently, the list of proposed changes are (in no particular order):

1) Fix issue 433030 by adding support for Atomic Grouping and Possessive Qualifiers

2) Make named matches direct attributes of the match object; i.e.
instead of m.group('foo'), one will be able to write simply m.foo.
名前つきマッチをマッチオブジェクトの direct attributes にする
つまり、m.group('foo') ではなく、単に m.foo と書けるようにする。


3) (maybe) make Match objects subscriptable, such that m[n] is
equivalent to m.group(n) and allow slicing.

マッチオブジェクトを m.group(n) と同じものを m[n] のように subscriptable にし、また
スライスできるようにする

4) Implement Perl-style back-references including relative back-references.

5) Add a well-formed, python-specific comment modifier, e.g. (?P#...);
the difference between (?P#...) and Perl/Python's (?#...) is that the
former will allow nested parentheses as well as parenthetical escaping,
so that patterns of the form '(?P# Evaluate (the following) expression,
3\) using some other technique)'.  The (?P#...) will interpret this
entire expression as a comment, where as with (?#...) only, everything
following ' expression...' would be considered part of the match. 
(?P#...) will necessarily be slower than (?#...) and so only should be
used if richer commenting style is required but the verbose mode is not
desired.

6) Add official support for fast, non-repeating capture groups with the
Template option.  Template is unofficially supported and disables all
repeat operators (*, + and ?).  This would mainly consist of documenting
its behavior.

高速で繰り返しをしないキャプチャグループをテンプレートオプション共に公式にサポートする。
テンプレートは非公式サポートで、すべての繰り返し演算子 (* + ?) を
dissableにされています。


7) Modify the re compiled expression cache to better handle the thrashing condition.
Currently, when regular expressions are compiled, the result is cached so that if the
same expression is compiled again, it is retrieved from the cache and no extra work
has to be done.  This cache supports up to 100 entries.  Once the 100th entry is reached,
the cache is cleared and a new compile must occur.  The danger, all be it
rare, is that one may compile the 100th expression only to find that one
recompiles it and has to do the same work all over again when it may
have been done 3 expressions ago.  By modifying this logic slightly, it
is possible to establish an arbitrary counter that gives a time stamp to
each compiled entry and instead of clearing the entire cache when it
reaches capacity, only eliminate the oldest half of the cache, keeping
the half that is more recent.  This should limit the possibility of
thrashing to cases where a very large number of Regular Expressions are
continually recompiled.  In addition to this, I will update the limit to
256 entries, meaning that the 128 most recent are kept.

8) Emacs/Perl style character classes, e.g. [:alphanum:].  For instance,
:alphanum: would not include the '_' in the character class.

9) C-Engine speed-ups.  I commenting and cleaning up the _sre.c Regexp
engine to make it flow more linearly, rather than with all the current
gotos and replace the switch-case statements with lookup tables, which
in tests have shown to be faster.  This will also include adding many
more comments to the C code in order to make it easier for future
developers to follow.  These changes are subject to testing and some
modifications may not be included in the final release if they are shown
to be slower than the existing code.  Also, a number of Macros are being
eliminated where appropriate.

10) Export any (not already) shared value between the Python Code and
the C code, e.g. the default Maximum Repeat count (65536); this will
allow those constants to be changed in 1 central place.

11) Various other Perl 5.10 conformance modifications, TBD.


More items may come and suggestions are welcome.

-----

Currently, I have code which implements 5) and 7), have done some work
on 10) and am almost 9).  When 9) is complete, I will work on 1), some
of which, such as parsing, is already done, then probably 8) and 4)
because they should not require too much work -- 4) is parser-only
AFAICT.  Then, I will attempt 2) and 3), though those will require
changes at the C-Code level.  Then I will investigate what additional
elements of 11) I can easily implement.  Finally, I will write
documentation for all of these features, including 6).

In a few days, I will provide a patch with my interim results and will
update the patches with regular updates when Milestones are reached.


(略)

msg122225 - (view) 	Author: R. David Murray (r.david.murray) * 	Date: 2010-11-23 16:31 	

Please don't change the type, this issue is about the feature request of adding this 
regex engine to the stdlib.

I'm sure Matthew will get back to you about your question.

msg122228 - (view) 	Author: Matthew Barnett (mrabarnett) 	Date: 2010-11-23 18:34 	

issue2636-20101123.zip is a new version of the regex module.

Oops, sorry, the weird behaviour of msg122221 was a bug. :-(


ふむ。 Various other Perl 5.10 conformance modifications, TBD とかあるけど、この辺のはまあ色々な言語が(部分的にでも)取り込んでいったとしても Perl 6 の grammer って他の言語で実装されることはあるんだろうか。

■_

たぶん「後方互換」のためだよなあ> Visual Basic の Integerのサイズ

スレを勃てるまでもないC/C++の質問はここで 17 
897 デフォルトの名無しさん [sage] 2010/11/24(水) 08:08:22 ID: Be:
    unsigned intは32ビットプロセッサ上でインクリメントすると65535までしか入らないんですか? 

898 デフォルトの名無しさん [sage] 2010/11/24(水) 09:40:08 ID: Be:
    intのサイズによる。 

899 デフォルトの名無しさん [sage] 2010/11/24(水) 09:59:04 ID: Be:
    VisualBasicのIntegerは何故か2バイトだったなあ 

900 デフォルトの名無しさん [sage] 2010/11/24(水) 12:49:02 ID: Be:
    javaもあと20年くらいしたら、なぜかintが32bitとか言われてるかもしれない。 

■_ sort

解決したのはいいんですが


区切りファイルの列ソートについて | OKWave

区切りファイルの列ソートについて

僭越ながら、質問させていただきます。

タブ記号で区切られたTSVファイルというものを扱っているのですが、まずtest.tsvファイルを
配列に格納して、そこから2列目の値すべてを降順にソートし、(列をソートした結果の行は、ち
ゃんと最初のまま保持され、バラけずに出力されるようにしたい)その結果をresult.txtに表示
させるプログラムを作りたいと思っております。

ですが、自分が書いたプログラムではまったく動かず、どこが悪いのかも情けないことにわかりません…。

 かれこれ何時間も悩んでいますが、まったく方策が見出せません。どこをどう直せばいいのか、
ヒントだけでも構いませんので、教えてくださいませんでしょうか。

プログラムは以下です。

#!/usr/bin/perl

use strict;
use warnings;
use Fatal qw/ open /;
my @values;
my $tsv_file = "test.tsv";
my @tsv = &readtsvfile($tsv_file);

@values = sort { $a->[1] cmp $b->[1] } @tsv;

open(DATAFILE, '>>result.txt') or die("error :$!");
foreach(@tsv){
    print DATAFILE;
}

sub readtsvfile {
    open(IN, $_[0]);
    while(<IN>) {
        chomp;
        push @tsv, [ split(/\t/) ];
    }
    close(IN);
    return @tsv;
}

close DATAFILE;


このプログラムの手直しでも新しい方法でもなんでも構いません、何か教えてくだされば、本当
にありがたいです。よろしくお願いします。

質問者が選んだベストアンサー

期待かわかりませんがこれでどうでしょうか。

#!/usr/bin/perl

$tsv_file = "test.tsv";

open(IN,"$tsv_file");
@InFile = <IN>;
close(IN);

@sortdata = sort { (split(/\t/,$a))[1] <=> (split(/\t/,$b))[1]} @InFile;

open(OUT, '>>result.txt');
print OUT @sortdata;
close(OUT);

ソートについては参照URLに詳しく書いてあるので見てみるといいです。

参考URL:http://www1.parkcity.ne.jp/chaichan/src/perl07.htm


お礼

おはやい回答をいただき、本当に感謝しております。
あなたさまのプログラムで試してみたところ、私の期待していたものと違わず動作しました。
重ねて感謝いたしますとともに、URLを参考にもっと深く勉強いたします・・

ありがとうございました!

シュオーツ変換 (Schwartzian Transform) を使った例を出してもわかってもらえないとか 効率が…というのはあるだろうけど、それにしても sort { (split(/\t/,$a))[1] <=> (split(/\t/,$b))[1]} @InFile; はどうなんだろうか。 いまどきのマシン性能だったらもう気にするレベルじゃないんだろうか。 よく見ると、質問者はシュオーツ変換を使おうとしてるっぽいな(多分どこかの例を引き写しだろうけど)。

ところで Schwartzian Transform がなんで「シュオーツ変換」になったのだっけ?

■_ ネタ

ヲタ向け

佐藤大輔 もう書くの82なっちゃった [chaika]
353 名無し三等兵 [sage] 2010/11/23(火) 19:40:14 ID:??? Be:
    パシフィック&ストッキングwithガーターベルト 

354 名無し三等兵 [sage] 2010/11/23(火) 23:19:16 ID:??? Be:
    それをいうなら、
    レッドサン&ブラッククロスwithパシフィックストームだろ!
    とマジレスしてみる。

    ・・・真田さんorz 

■_

2010年11月23日

■_

怠惰に過ごした一日であった。

こーゆーのの日本語版ないのかしらん → Everything you need to know about pointers (but were afraid to ask) [video] : programming

■_ touch

意外に touch のこの機能知らない人が多かったりするんだよな。

この会社辞めようと思ったソースコード#1C 
620 仕様書無しさん [sage] 2010/11/16(火) 07:01:08 ID: Be:
    if [ !-e ${foo} ]; then
      echo -e "" > ${foo}
    fi 

621 仕様書無しさん [sage] 2010/11/18(木) 21:49:35 ID: Be:
    >>620
    何そのキモイ書き方……。
    逆に興味出てくるわ……。 

622 仕様書無しさん [sage] 2010/11/18(木) 23:47:21 ID: Be:
    えっ 

623 仕様書無しさん [sage] 2010/11/19(金) 00:18:05 ID: Be:
    正解はこう
    if [ !-e ${foo} ]; then
      touch ${foo}
    fi 

これとはちょっと違うけど、Windows (のコマンドプロンプト)で 大きさがゼロバイトのファイルをどう作るかとかいうのもいろいろやり方があったり。

■_ 本物のプログラマー

だめださっくり訳せない(怠惰もーど)。

Will the really real programmers please stand up? ≪ Steven Benner's Blog

How do you define a real programmer? There are many facets that you can use to judge 
someone's skill as a programmer: ability, experience, enthusiasm, dedication, etc. 
But I recently read an article by RethinkDB blogger Slava, and he boils all of these 
points down to one item, memorization. Some people agree with this idea, but I do not, 
at all.

あなたは本物のプログラマー (real programmer) をどう定義しますか?
ability (), experience (), enthusiam (), dedication () などなど
プログラマーとしての誰かのスキルを判定するのに使える多くの facets があります。
けれどもわたしが最近読んだ RethinkDB logger Slava のarticle を読むと、
彼はこれらのポイントすべてを一つのアイテム memorization に boils していました。
この考えに賛成の人もいますが、わたしは全面的にそうだとは思えません。

I have heard several companies bragging about having interview scripts like this, 
saying that this kind of testing is the most effective way to filter out unqualified 
applicants. However I think that the post by Slava perfectly demonstrates just how 
flawed this concept is. If there is one thing you should have learned in school, it's 
that standardized tests are a terrible metric for gauging skill or intelligence.

わたしは unqualifed applicants (志願者、応募者) を filter out する最も効率的な
やり方だと主張するためのこのような interview scripts を持っているといった
企業の bragging (自慢) をいくつか耳にしたことがあります。
けれどもわたしは、 Slava のポストはこのような concept がいかに欠陥のあるものかを
完璧なまでに露にしたと確信しているのです。
もしあなたが学校で学ぶべきことがひとつあるのなら、
それは標準化されたテストというものは
スキルや知性を測るための terrible metric であるということです。


But more to the point, I think that this is the wrong way to define a real programmer. 
Allow me to present you with my definition of a real programmer.

But more to the point、
わたしはこのやり方は本物のプログラマーを定義するものとして間違っているものだと思うのです。
本物のプログラマーについてのわたしなりの定義を説明させてください。


What is a real programmer?
本物のプログラマーってなんだろうか?

This comes from one of my favorite quotes in all of history:

    “Real knowledge is to know the extent of ones ignorance” – Confucius

Having an encyclopedic knowledge of a college curriculum is not required to be a great 
programmer. Real world software development isn't about memorizing low-level programming
techniques, or math formulas. These are great tools to have at your disposal, but are
certainly not the end-all-be-all of development. It's all about problem solving, in the
most efficient and elegant way that circumstances allow.

大学のカリキュラムの encyclopedic knowledge (百科辞典的知識→?) は
偉大なプログラマーには必要とされていません。
現実世界のソフトウェア開発は低水準なプログラミング技法を覚えることでも
数学の数式を覚えることでもありません。
These are great tools to have at your disposal,
but are certainly not the end-all-be-all of development.
状況が許す最も効率的でエレガントなやり方での問題解決に関するものです。


As a programmer you will be supplied with problems every day, and it's your job to 
figure out how to solve these problems. To do this you need to know what you language 
of choice is capable of, this comes with experience. You will also need to be able to 
look at the possible solutions and pick the best one for the situation at hand.

プログラマーとしてあなたには日々問題が与えられ、
いかにしてそれらを解決するかを見つけ出すかということがあなたの仕事です。
それを果たすためにあなたは
you language of choice is capable of, this comes with experience.
を知らねばなりません。
You will also need to be able to look at the possible solutions
and pick the best one for the situation at hand.


Now here's the fact that breaks the machine, you do not know every possible solution 
for every problem, and you never will. I don't care how experienced you are, how much 
education you have had, or how many millions of lines of code you have written, 
because there are so many possible ways to approach the practical problems you find in 
software development that it is literally impossible to know everything. So you need 
to have a mix of creativity and resources that let you learn how to solve new problems.

わたしはあなたがどれほどの経験をつんでいるのかを気にしませんし
どのくらいの教育を受けたのかも気にしません。
また、何百万行のコードをこれまでに書いてきたのかもきにしません。
なぜなら、


Real programmers are the ones who can learn fast, and learn by doing. These are the 
people who constantly strive to keep up with the technology they love. They have ample 
real world experience building, learning and growing their craft, but know that they 
still don't know everything.

本物のプログラマーとは、すぐに学ぶことのできる人物であり
行動によって学ぶことのできる人物です。
このようなことは

彼ら(本物のプログラマー)は自分たちの craft (技術、技能)を構築し、学習し、向上させる
広範囲な real world experience を持っていますが、
自分たちがすべてを知っているわけではないことを知っています。


In short the defining characteristic of real programmers is that they never stop 
learning.

本物のプログラマーの特性の定義を一言で言うと
彼らは決して学ぶことを止めないということです。

My experience with real programmers
本物のプログラマーとのわたしの経験


I've worked as a peon coder, link-in-the-chain guy, I've worked as a manager who did 
the hiring and firing, I've worked as a one-man-shop serving milti-billion dollar 
corporations, and I've worked as a solo freelancer. This experience has taught me two 
things:

   1. I am not the greatest programmer in the world, despite what my website says, and

   2. That you can rarely tell a good programmer from a bad one by the resume, or the 
      interview.

I've seen guys with terrible resumes turn out to be so far above my level that I still 
have them on my guru list, and I've seen guys with amazing resumes who couldn't grasp 
even the most basic concepts.

How to find a real programmer
本物のプログラマーを見つけ出すには

続く

Get real

This was a rather long-winded rant, but let me sum it up in a few nice bullet points.

    * People who are more interested in the buzz words and CS theory than actual experience
      and a history of practical application of skills are a perpetual thorn in the side of
      the programming industry.

    * Don't look down on other programmers because they don't fit your model definition of
      a programmer, they just might be better than you.
      他のプログラマーたちを見下してはいけない。なぜなら彼らはプログラマーの
      your model definition に fit していないのであって、あなたより優れているのかもしれないのだから。

    * If 99 out of 100 candidates fail your interview then you are looking for something
      that doesn't exist.
      候補者100人のうち99人までがあなたの interview に fail するのであれば
      あなたは実在しない何かを追い求めているのだろう。

    * Without a varied group of developers in your team you will suffer from a lack of 
      creativity.

    * Don't test a CS curriculum, test the ability to create.

    * If you ever finish learning, then your career as a programmer is over. Go study law.
      もし学ぶことを止めてしまったら、あなたのプログラマーとしてのキャリアは終わる。
      Go study law.

In short

Look for someone who truly understand the concepts, who can offer creative and alternative
ideas, and who shows the ability to grow as a programmer. Then you will finally find a
real programmer.

コンセプトを完璧に理解していて
create で alternative な ideas を offer でき
プログラマーとして成長するための ability を見せる人物を探ましょう。
そうすれば最後には本物のプログラマーに巡り会うでしょう。

Related articles

    * The 5 types of programmers
      http://stevenbenner.com/2010/07/the-5-types-of-programmers/
    * Reset cascading style sheets are bad practice
      http://stevenbenner.com/2010/02/reset-cascading-style-sheets-are-bad-practice/
    * AddThis: friendly widget and brilliant viral tracking scheme
      http://stevenbenner.com/2010/02/addthis-friendly-widget-and-brilliant-viral-tracking-scheme/
    * Excessive JavaScript and AJAX: bad practice & broken pages
      http://stevenbenner.com/2010/01/over-use-of-javascript-and-ajax-bad-practice-and-broken-pages/
    * PHP needs an IDE and a membership provider
      http://stevenbenner.com/2009/09/php-needs-an-ide-and-a-membership-provider/

■_

A skeptic's history of C++ 

The C++ programming language was designed by Bjarne Stroustrup as an improvement over 
the C programming language, incorporating a number of enhancements. Probably the most 
important is built-in facilities for object oriented program design, as hinted by a 
term used as a working title for the project early in its development: “C with Classes.”

C++ というプログラミング言語は C に対する改良として数多くの拡張を持ち込んで
Bjarne Stroustrup によって開発されました。そのなかでおそらく最も重要なものは
“C with Classes”という開発の初期段階において
プロジェクトのworking title として使われていた言葉が暗示している
オブジェクト指向プログラム設計のための組み込みの機能です。

It is heavily used for software development where performance matters, particularly in the
realm of very complex application development where a little bit of OOP goes a long way
toward making that kind of complexity manageable. Unfortunately, C++ itself is an
incredibly complex beast of a language.

C++ は性能が重要である分野のソフトウェア開発、
特に非常に複雑なアプリケーションの開発でに広く使われています。

残念なことに、C++ はそれ自身が信じがたいほどに複雑な beast of a language です。

Originally, it promised to be a superset of the C language with facilities for object 
oriented programming. Another language, developed around the same time (arriving a 
mere three years later) with the same goals, was Objective-C. To a significant degree, 
the differences between the languages can be attributed to two things:

元々、C++ は C にオブジェクト指向プログラミングの facilities を加えたスーパーセットとなる
ことを約束していました。同時期 (arrivig a mere three years later) に開発されていた同じ目標
を持つもう一つの言語が Objective-C です。
違いをはっきりさせるためのこれら二つの言語の違いは、次の二つのことがらで表せます:

   1. Influences on their design
      設計における影響

   2. How well they achieved those early goals
      その初期目標をどの程度達成できたのか

続く
<--
C++ is listed on Wikipedia as having been influenced by a slew of languages, including 
C (of course), Ada 83, ALGOL 68, CLU, ML, and Simula. Most of its casual users would 
likely have a difficult time coming up with that list off the tops of their heads, and 
for the parts of the list that might occur to them, it is likely that any random pair 
of casual C++ programmers would not come up with the same short list. To some extent, 
the influences on C++ are obscured by how they were bent to fit the new language, and 
some might suggest absinthe is another important influence.

Objective-C, by contrast, has two influences that would come immediately to mind for 
even the most casual Objective-C programmer (possibly excluding people who are not 
aware the language is older than MacOS X): C and Smalltalk. The Wikipedia article 
about Objective-C offers those two, and only those two, influences on the language's 
design, reinforcing the obviousness of those influences.

As for achieving the early goals of providing an object oriented superset of C, Objective-C
appears to have succeeded in all essential details, while C++ looks in some respects more
like the result of giving up on those goals in mid-effort to pursue something shiny instead.

Much as the influences on Objective-C are much simpler than those on C++, so is the design
of the language much simpler. The reason Apple (and NeXT before it) chose Objective-C as
its primary object oriented application and system development language seems obvious, in
that it offers simplicity and elegance of design — at least as compared with the design of
C++. Outside of its eventual rise to prominence as the language of choice on Apple
platforms like MacOS X and Apple's iOS, however, C++ is the clear winner in terms of
popularity and mindshare. Even now, so many years after its creation and without any major
resurgence like Objective-C has enjoyed, C++ is in heavy use. For instance, it is the core
implementation language of all the most popular major Web browsers for non-Apple platforms;
Chromium, Firefox, Internet Explorer, and Opera are all substantially built using C++. Even
Apple's Safari browser is written primarily in C++, though other browsers for MacOS X have
used Objective-C instead.

Perhaps it was the fact that C++ was “first to market” by about three years that accounts
for the massive success of the language, and the relative popularity failure of Objective-C.
We can finally find books about programming in Objective-C on the shelves of every major
book store, but they focus on development for MacOS X and Apple's iOS. General-purpose,
platform-agnostic use of the language is apparently not a popular enough area of interest
for anyone to peddle books about the subject.

Criticisms of C++ appear to substantially outnumber its praises. Meanwhile, the only people
talking about Objective-C (for the most part) are developers for Apple platforms. Those who
develop only for Apple platforms are generally regarded as untrusthworthy in their pro-Apple
biases by many other programmers, so the fact they primarily sing its praises carries little
weight amongst developers who avoid Apple platforms.

What are probably the best criticisms of C++ have both been attributed to Stroustrup 
himself. The first is his statement that C makes it easy to shoot yourself in the foot, 
and C++ makes it harder — but when you shoot yourself in the foot with C++, you typically
blow off your whole leg. The second is an interview for IEEE Computer Magazine that was
supposedly shelved because it was decided it could not be published, in which he “admits”
that C++ was all a joke from the very beginning, and he goes on to humorously extoll its
vices. Stroustrup has disclaimed the article, saying it was a hoax, and said that he
thinks it would have been funnier if he had written it himself.

By the time one is done reading that fictional interview, one might be forgiven for 
questioning for a moment whether C++ really was all a joke from the beginning. If so, 
the joke seems to have been made at the expense of Objective-C, which lingered in 
obscurity for almost a generation — an eon in the terms of computer technologies — 
before finally finding its niche in the Apple ghetto. The fact of the matter is that, 
without Objective-C and Cocoa, Apple would almost certainly be in real trouble in its 
search for developers to support its platforms; the joy many find in developing with 
those tools helps developers who are the target of systematic mistreatment by Apple's 
legal and marketing teams overcome some of their misgivings.

One might think C++'s days are numbered, now. Alternatives that seem significantly 
better suited to the same jobs litter the landscape, and the obvious direct competitor 
— Objective-C — is in some ways the least of them. Objective Caml is regularly held up 
as an example of a high performance language, frequently outperforming C++ by a 
significant margin in benchmark tests, offering more succinct and well-organized 
source code, and providing developers with far cleaner and more interesting 
development models, and it is not even derived from the same family of programming 
languages. D aims to compete in the same space, though its proprietary roots may 
hinder its widespread adoption. Google's Go language presents controversial 
trade-offs, but there is no doubt that its design offers huge advantages for certain 
types of software development, including concurrency.

Judging by the lessons of history, however, I am inclined to believe that C++ will have a
long, stable tenure in its niche for some time to come. It has even been sneaking into
operating system kernel development for years, as horrifying a thought as that might be
for people who care about things like OS reliability. There is no doubt that it offers
some advantages over C for certain types of performance-critical programming, and that
its library support is extensive — even legendary. Despite this, at least some of the
strength of its hold on developers seems to be based on ignorance of the alternatives,
and that is not a characteristic that will easily be pushed aside by a would-be competitor.

Get IT tips, news, and reviews delivered directly to your inbox by subscribing to 
TechRepublic's free newsletters.
  -->

■_ i

某氏にまたその話題に食いつくと言われそうですがw


VBAの変数は何故「i」から始まることが多い? | OKWave


最近、エクセルVBAを始めたものです。

サイトや解説本でいろいろな記述を見たのですが、私が見た限りでは全ての例で、最初に出てく
る変数は「i」で表現されていました。

そして次に出てくる変数は「j」。
(例えば、 For i = 1 to 10 ・・・・ Next i とか)
26あるアルファベットからたまたま「i」が選ばれた?にしては、数多くの解説本やサイトで「i」
が使用されているので疑問に思いました。

変数を表すのに、例えば「a」「b」「c」……としても何ら問題にならないと思うのですが……
「i」にしているのには何か理由があるのでしょうか。

ANo.7

昔のことですが、整数の暗黙的な変数はI~Nでした。
よってI,J,K……Nという順番で使われていると思います。

またIndexとして使われるので頭文字Iが使われていることもあるかも知れません。
個人的にはIと1が見た目で間違うので、違う変数を使った方が良いような気もしますが…。

ANo.6

ループ・カウンターは、i を使うというのは、コーディング・ルールにありますね。こういう動
きそのものを、incremental(増加の形容詞)または、increments と言いますが、その略称から、 
i が使われたと思っています。確かに、数値は、データ型の意味ではなくて、integer の整数
が使われ、iteration 繰り返しですが。

iの次の j, k が使われます。しかし、l(エル)は、当方では使わないようにしています。1(い
ち)と見誤りやすいからです。また、小文字を使うのが通例です。

何でも使っても構わないものの、あまり何でもありになると読みにくくなるというか、暗黙のル
ールのようなもがあるので、それ以外を使うと、そういうことを知らない人だと思われます。ま
た、データ側は、現在では、Long型にするというのが、一般的です。

なお、いわゆる変数のプレフィックス(接頭辞)は、数値型は、Lng, Int などは付けないように
すると聞きます。それは、いずれ.Net の移行を想定していると言いますが、変数のプレフィッ
クスを表立って否定するのは、ハンガリアン記法の提唱者のチャールズ・シモニーが、
Microsoft を辞めたせいかもしれません。(笑)

ANo.5

For文で使われる添え字は、そもそも indexのことなのでそれの省略形で i とされています。

二重ループとかになると、j が出てきますが、これは単にアルファベット順で i の次だから j。
以降、ループが増えるごとにk、l...と続きます。

変数名の先頭にiが付くパターンは、整数系を表す integer の頭文字です。
変数名だけを見ただけで、変数の型が分かった方が読みやすいんじゃねーの?的な発想から
広まりました。

変数の型が、文字列の場合は、stringを表す s とか、str とかから始まることが多いです。

ANo.4

>FORTLAN

うぉっと、FORTRANですね。

ANo.3

数学などで、添え字にiを使うことが多いから。

最初期のプログラミング言語FORTLANでは、変数名IやJ、Kなどは明示的に型宣言しなくても整数
型として扱うという仕様があるくらい、理系な人ならなじみのある表現なのでしょう。

それで、そこらへんの慣習を踏まえて、BASICに限らず、たいていのプログラミング言語でiを使
うことが多いのではないかと。

たぶんですが。

ANo.2

integer(=整数)の頭文字のiを使うのが慣習になってるのでは?。

また、プログラム言語に依っては、変数の型宣言を省略したときに、

iで始まっている変数を整数型として扱うなどというものもありました。

また、ソフトウエアの開発会社の中には、整数型の変数名を、iで始めるという

ことをコーディング時の規約として定めているケースもありますので、

そういった関係かもしれません。その著者の方の習慣なんでしょうかね。

でも、実際には変数名をiなどとしたら、長いプログラムではエディタソフトで

検索する時は大変ですよねぇ。


ANo.1

昔のFORTRANの名残だと思います

FORTRANではi~nで始まる変数は整数型その他は実数型でした。

だからループカウンタなどは整数なのでiから使っていると思います

FORTRAN の暗黙の型宣言(初期のFORTRANには明確な型宣言というものがありませでした)から きているというのはそらまあそうなんでしょうけど、 FORTRAN がそういう仕様を採用した理由ってのもあるはずなんですよね。 で、英語圏のこの種の掲示板でも同様の質問(ループの制御変数の名前が~) がありますが はっきりとした理由を一次資料つきで答えてくれているものって見たことがないのですよね。

■_ Prolog


Prologでまったり Part4 
765 デフォルトの名無しさん [sage] 2010/11/10(水) 09:00:02 ID: Be:
    Prologでボジョレーヌーボーの順位を確定することはできないでしょうか?

    ボジョレーの出来を勝手に並べて見た。 - ワクワク人生のススメ!
    http://d.hatena.ne.jp/orangewind/20101109/p1

766 デフォルトの名無しさん [sage] 2010/11/10(水) 10:15:57 ID: Be:
    >>765
    参考までに、
    http://nojiriko.asia/prolog/c132_172.html 

767 デフォルトの名無しさん [sage] 2010/11/10(水) 11:41:07 ID: Be:
    >>765
    矛盾していようがいまいが、ネチネチやっていく他はなさそうw

768 デフォルトの名無しさん [sage] 2010/11/10(水) 12:10:50 ID: Be:
    世界は矛盾に満ちている。しかし、我々は一節、一節、あなたの
    いうことは全て正しい、という姿勢で定義していく。
    当然、矛盾に満ちたものとなるから、そこから、注釈、解釈、を
    定義していく。橋渡しをしていく。
    そうではなくて、モデルの段階で矛盾なくと考えるから、先に進
    めなくなる。 

769 デフォルトの名無しさん [sage] 2010/11/10(水) 12:12:28 ID: Be:
    そういう意味で>>765はすばらしい課題だと思います。 

770 デフォルトの名無しさん [sage] 2010/11/10(水) 16:04:06 ID: Be:
    >>766
    やってる人いたのかワロタww

■_

2010年11月22日

■_

・検索システム
「さんぽう」と入力すると何も言わずに「さんぼう」で検索したり 「けんろん」と入力しても「げんろん」で探す某所のシステムをどうにかしてください。 見つからないならその旨云ってから似た言葉で検索してくれと。

・ませまちか
Mathemathica の 8 がでたらしく。 サイトを見てたら Home edition なんてのがあるのでこれは多少は安く買えるのかもしれない と期待してクリックしていったら 「お前の住んでいるところには売らん」(チョー訳)と蹴られますた ○| ̄|_ Standard edition だと40万以上するんすけど…

■_ 今日の丸投げ

C言語のプログラム作成をお願いします | OKWave

C言語のプログラム作成をお願いします

課題の意味も解き方も分かりません

問
x=1~n の範囲で1刻みで、log x、 x の平方根、e の x 乗、7の x 乗を、下記のように求めてください。

実行例
Input n: 5
x log(x) sqrt(x) exp(x) pow(7,x)
1.0 0.000 1.000 2.718 7.000
2.0 0.693 1.414 7.389 49.000
3.0 1.099 1.732 20.086 343.000
4.0 1.386 2.000 54.598 2401.000
5.0 1.609 2.236 148.413 16807.000

数字は%7.3で出力お願いします

関数が分からないのでもうお手上げです
どなたか、助けてください
よろしくお願いします

これだけではよくあるパターンで、どうということもないのですが

質問者が選んだベストアンサー

>関数が分からないのでもうお手上げです

関数はこれです。

#include <math.h>

double log(double x)自然対数 ln(x), x > 0
double sqrt(double x)x の平方根
double exp(double x)指数関数.e の x 乗を返す
double pow(double x, double y)x の y 乗


「プログラムを作れ」っていう質問の仕方がこのサイトでは一番嫌われるパターンです。

是々ここまで作ったけど、◯◯の部分がわかりませんという質問の仕方をすると皆さん親切に教えてくれます。

お礼

そうでしたか、ずっと作ってもらっていたので、わかりませんでした。
ありがとうございました。

なんだこのやりとり

■_ 想像してごらん

佐藤大輔 もう書くの82なっちゃった 
339 名無し三等兵 [sage] 2010/11/21(日) 20:56:45 ID:??? Be:
    完結はないって想像してごらん

    もし君が試すならそれは簡単だよ

    僕らの前に完結なんてないのさ

    僕らの後には新作だけなんだ

    想像してごらんよ、全ての佐藤儲が

    新作のために生きてるんだって 

あるのかなあ…新作。

■_ F#とは

ついったで


Twitter / @Takuo Watanabe: トラ技2010年12月号p.90,F# についての説 ...

トラ技2010年12月号p.90,F# についての説明が「Fortranの現代版で,科学算術用途に向いていると
いわれている」となっている.

というのを見かけたのですが、

F Sharp - Wikipedia

F#はスクリプティングからクロスプラットフォームアプリケーションに至るまで、あらゆる範囲
の開発に利用することができる。

その特徴や環境から、F#は科学計算用途に適した言語であるといえる。 F#は、低級だが高速な
数値計算言語(Fortranなど)と、高級だが低速な言語(Mathematicaなど)の両方の特徴をもつ。 
F#はコンパイルされた言語と同等の処理速度(典型的にはCとJavaの中間)をもち、洗練された
高級言語としての特徴をもつ(安全性、静的型付け、パターンマッチ、高階関数、カリー化、モ
ナドなど)。

という首をかしげてしまうような説明文が。

F Sharp (programming language) - Wikipedia, the free encyclopedia

F# (pronounced F Sharp) is a multi-paradigm programming language, targeting the .NET Framework,
that encompasses functional programming as well as imperative and object-oriented programming
disciplines. It is a variant of ML and is largely compatible with the OCaml implementation. F#
was initially developed by Don Syme at Microsoft Research but is now being developed at
Microsoft Developer Division and is being distributed as a fully supported language in the .NET
Framework and Visual Studio as part of Visual Studio 2010.[2]

(以下略)

と似ても似つかない内容。 と思ったら(英語版の)かなり古いものの説明文が現在の日本語版のそれと近いものだとか。

おまけ


F#って何?? | OKWave

F#というのは1960~1970年代に科学技術計算に多用された(もちろん今でもよく使われている)
Fortranなる言語に似せて作られたプログラミング言語の名前で、それで作られたプログラムは
Microsoft .Net Framework上で実行する事ができる。

 ところで、Microsoft .Net Frameworkというものは、C#、VB.NET、F#で書くプログラム中から
同じライブラリーを呼び出す事もできるし、C#で書いてコンパイルしたライブラリーをVB.NETか
ら呼び出す事もできる。今ではほとんどやらないが.Net Frameworkのバージョンが若い頃はライ
ブラリーロジックはC#で、それを呼び出して操作する画面はVB.NETで、なんて事もやられていた。

 F#がメニーコアでのプログラミングに向いているのかどうかは私は知らないが、単純な並列計
算を力技で解かせる事が得意なのであれば、計算ロジックをF#で書いて、それを呼び出すインタ
ーフェース(画面だね)をC#やVB.NETで書くというのはアリ、だと思う。

 関数型言語というのは、全てのプロシージャー(手続きを一まとめにしたもの)が「値を返す」
言語の事を言う。中学校で習ったよね。

 y=f(x)
 例えば、f(x)=x^2+5だとすると、C言語では以下のようになる。
 double f(double x) {
  return x^2+5;
 }

 これは極端な例だけど、これを

 double x, y;
 for(x = -1.0; x < 5.0; x += 0.01) {
  y=f(x);
 }

 などとして(後は画面描画機能を加えれば)画面上に二次関数を表示したりできるね。まぁ、
関数型言語なんて言葉は既に意味の無いものになっているのであまり気にしなくても良いだろう。

 わざわざ「関数型言語」なんて言葉があるのは、その当時はプロシージャーが値を返さない言
語も多かったという昔話でしかない。(その当時の)BASIC言語とか。GOSUB(サブにイけ)とか
どんだけウホッ良いサブ(ルーチン)かっていう話ですよホント。「(F#プログラミングを)やら
ないか」とか言われたらもうそこであなたもF#プログラマーなわけです。ただ、F#が流行りそう
か、と言われたら・・・・ボクには何とも言えない。

そうだったのかー(棒読み

■_ パラダイムXXX

InfoQ: ソフトウェアエンジニアリングの40年。変化は来つつあるのか?

2つめの重要な断絶は80年代初頭に見られた、手続き型からオブジェクト指向型プログラミング
へのパラダイムチェンジでしょう。

「パラダイムチェンジ」だなんてまあた誤訳かあと思ったら

InfoQ: Four Decades of Software Engineering, are Changes Coming?

A second important rupture could be observed in the early 80's with the paradigm 
change from procedural to object-oriented programming.

原文からして使ってるじゃん!

paradigm は shift するもんであって change するもんじゃないと思うんだけどなあ。

■_

2010年11月21日

■_

・「算法表現論」
また読んでみようかと図書館に行き、地域の中央図書館の保存庫にあるはずなので 検索システムで検索…ひっかからない。 そんなばかなと思いつつ司書さんのところで調べてもらうと、 どうも廃棄されてしまったらしい ○| ̄|_ さらに調べてもらうと、もう都内の公共図書館のどこにもないんだとさ ○| ̄|_

廃棄するくらいならスキャンさせておくれよ ○| ̄|_


情報科学
岩波講座  情報科学
■構成 全24巻

〈 全巻の構成 〉
◆ 	1 情報科学の歩み (高橋 秀俊)
◆ 	2 電子計算機への手引き (森口 繁一,筧 捷彦,高澤 嘉光)
◆ 	3 プログラムの読み方 (森口 繁一,小林 光夫,武市 正人)
◆ 	4 情報と符号の理論 (宮川 洋,原島 博,今井 秀樹)
◆ 	5 情報ネットワークの理論 (野口 正一,木村 英俊,大庭 弘太郎)
◆ 	6 オートマトン・形式言語理論と計算論 (福村 晃夫,稲垣 康善)
◆ 	7 論理と意味 (長尾 真,淵 一博)
◆ 	8 情報の構造とデータベース (長尾 真,片山 卓也,植村 俊亮)
◆ 	9 プログラム言語 (米田 信夫,西村 恕彦,竹下 亨,和田 英一,武市 正人,原田 賢一)
◆ 	10 基本的算法 (野下 浩平,高岡 忠雄,町田 元)
◆ 	11 データ管理算法 (渋谷 政昭,山本 毅雄)
◆ 	12 算法表現論 (木村 泉,米澤 明憲)
◆ 	13 順序機械 (当麻 喜弘,内藤 祥雄,南谷 崇)
◆ 	14 計算機の機能と構造 (矢島 脩三)
◆ 	15 計算機アーキテクチャ (相磯 秀夫,飯塚 肇,元岡 達,田中 英彦)
◆ 	16 オペレーティング・システムの機能と構成 (高橋 延匡,土居 範久,益田 隆司)
◆ 	17 離散数学 (高橋 磐郎,藤重 悟)
◆ 	18 数値計算 (森 正武,名取 亮,鳥居 達生)
◆ 	19 最適化 (西川 〓一(ニシカワ ヨシカズ),三宮 信夫,茨木 俊秀)
◆ 	20 信号処理とシステム制御 (有本 卓)
◆ 	21 パターン認識と図形処理 (長尾 真,斎藤 収三,木村 文彦,高木 幹雄,飯沼 武,辻 三郎)
◆ 	22 人工知能 (白井 良明,辻井 潤一)
◆ 	23 数と式と文の処理 (伊理 正夫,一松 信,山本 純恭,内野 正弘,佐々木 建昭,長尾 真,田丸 啓吉)
◆ 	24 生体における情報処理 (南雲 仁一,外山 敬介,甘利 俊一,金子 隆芳,村松 正実,和田 英一)

シリーズ全巻あったのに、現在残っているのは四つくらいでした。しくしく。 明倫館にあったの買っちゃおうかしらん…金も場所もきついけど。

■_

■_ 15% 引き

Zed の本「Leran Python The Hard Way」が割引とか。


Shedding Bikes: Programming Culture And Philosophy


You know, Lulu totally rocks. Today I got this email:

---------------------------------------------------------------------
Purchase Learn Python The Hard Way with 15% OFF
Enter coupon code STOCKING305 at checkout Offer ends 12/15/2010
---------------------------------------------------------------------

Disclaimer: Use coupon code STOCKING305 at checkout and receive 15% off
Learn Python The Hard Way. Maximum savings with this promotion is $10.
You can only use the code once per account, and you can't use this
coupon in combination with other coupon codes. Sorry, self-purchases
(buying books that you've published) aren't eligible. This great offer
ends on December 15, 2010 at 11:59 PM EST so try not to procrastinate!

(略)

■_ encoding

バグじゃあないと思うんだけど(わたしの勘違いだったらごめんなさい)。


Why are two strings with same bytes and encoding not identical in Ruby 1.9? - Stack Overflow

In Ruby 1.9.2, I found a way to make two strings that have the same bytes, same 
encoding, and are equal, but they have a different length and different characters 
returned by [].

Is this a bug? If it is not a bug, then I'd like to fully understand it. What kind of 
information is stored inside Ruby 1.9.2 String objects that allows these two strings 
to behave differently?

Below is the code that reproduces this behavior. The comments that start with #=> show 
you what output I am getting from this script, and the parenthetical words tell you my 
judgment of that output.

#!/usr/bin/ruby1.9
# coding: utf-8
string1 = "\xC2\xA2"       # A well-behaved string with one character (¢)
string2 = "".concat(0xA2)  # A bizarre string very similar to string1.
p    string1.bytes.to_a    #=> [194, 162]  (good)
p    string2.bytes.to_a    #=> [194, 162]  (good)
puts string1.encoding.name #=> UTF-8  (good)
puts string2.encoding.name #=> UTF-8  (good)
puts string1 == string2    #=> true   (good)
puts string1.length        #=> 1      (good)
puts string2.length        #=> 2      (weird!)
p    string1[0]            #=> "¢"    (good)
p    string2[0]            #=> "\xC2" (weird!)

I am running Ubuntu and compiled Ruby from source. My ruby version is:

ruby 1.9.2p0 (2010-08-18 revision 29036) [x86_64-linux]
p string2.bytes.to_a show result [194, 162] ?? That should not be! 
Actually, Zabba, that is the expected result because 194,162 is the UTF-8 encoding of 
the cent character ¢ (codepoint 0xA2). Apparently, if you pass an integer to concat, 
it will add one character with that value to your string. See this table in Wikipedia 
aobut UTF-8. They use the cent character as an example in the second row: 
en.wikipedia.org/wiki/UTF-8#Description 
I think the problem is in the string's encoding. Check out James Grey's Shades of Gray: 
Ruby 1.9's String article on Unicode encoding.

Additional odd behavior:

# coding: utf-8

string1 = "\xC2\xA2"       
string2 = "".concat(0xA2)  
string3 = 0xC2.chr + 0xA2.chr

string1.bytes.to_a    # => [194, 162]
string2.bytes.to_a    # => [194, 162]
string3.bytes.to_a    # => [194, 162]

string1.encoding.name # => "UTF-8"
string2.encoding.name # => "UTF-8"
string3.encoding.name # => "ASCII-8BIT"

string1 == string2    # => true
string1 == string3    # => false
string2 == string3    # => true

string1.length        # => 1
string2.length        # => 2
string3.length        # => 2

string1[0]            # => "¢"
string2[0]            # => "\xC2"
string3[0]            # => "\xC2"

string3.unpack('C*') # => [194, 162]
string4 = string3.unpack('C*').pack('C*') # => "\xC2\xA2"
string4.encoding.name # => "ASCII-8BIT"
string4.force_encoding('UTF-8') # => "¢"

string3.force_encoding('UTF-8') # => "¢"
string3.encoding.name # => "UTF-8"

l
I found that article earlier tonight and read most of it but didn't find an answer. 
Please note that both string1 and string2 have the same encoding, UTF-8. Either I have 
found a bug in Ruby, or that article's description of Ruby 1.9 is incomplete. The 
article claims "In Ruby 1.9 a String is now a collection of encoded data. That 
means it is both the raw bytes and the attached Encoding information about how to 
interpret those bytes." But these two strings have the same bytes AND the same 
encoding, so why do they behave differently? There must be some other important 
attribute of strings.

I lean toward it being a bug. Using concat with an integer is not intuitive to me. I'm 
messing with some additional tests to see what I can dig up.
I think it's a bug in concat.

どうなんでしょ。

■_ trait

PHP に。


PHP 5.4 will support flexible inheritance with 'traits' : programming

PHP 5.4 will support flexible inheritance with 'traits' (simas.posterous.com)

What I don't understand: why didn't they opt for the current implement mechanism, but 
extended with implemented methods? I mean, that's basically what traits are. It's not 
as if it would break anything (if you'd do this before it would yield an error) and 
it's not as if PHP is going to be a clean programming language anytime soon.

I never got the whole problem with the implementation of multiple inheritance. You got 
two methods or properties with the same name? Just throw a fatal error. Now they 
designed traits which basically do the same thing (no not semantically, I know) and 
introduced a new syntax. The conflict operators are neat, but will confuse a lot of 
people in an already confusing PHP world.

edit: It appears I got worked up on PHP semantics. Well that was a waste of my time.
I think its because traits are semantically more powerful. They can be used to 
indicate that a class "has a" feature. With inheritance (multiple included), 
your only option is to say that a class "is a" <parent class(es)>.

For example, what if I was using an ORM and wanted to reuse the concept of an email 
column? This email column would have a getter method, a setter method, and a 
pre-persist validation method to make this work. With traits, I would just put this 
functionality in its own class and then have use EmailAddressColumn; in my models. 
With inheritance, there is nothing I could inherit from that would make semantic sense.

結構盛り上がってます。元記事はこちら↓


New to PHP 5.4: Traits - Simas Toleikis

New to PHP 5.4: Traits

As a long-time internals.php mailing list reader I am going to tell you a small secret 
– the first alpha release for PHP 5.4 should be just around the corner. This release 
is packed with some welcome new language features, usual bug fixes followed by some 
performance and memory management improvements. One of the noteworthy language 
additions are Traits – a brand new horizontal code reuse mechanism.

The domain of Traits

When a class is extending another class it is said that the child class is now a 
kind-of parent class – it has common properties, methods and functionality. Thus, 
inheritance provides access to all non-private code of a parent class following a 
pattern of vertical code reuse.

However, while inheritance is a great way to reuse code – it does not solve all 
duplication issues. There are times when two objects might require common 
functionality but are not supposed to be derived from the same parent class. Consider 
an example of two classes:

class A { ... } class B extends ArrayObject {
    // Uses SPL ArrayObject functionality}

Now imagine one is required to make both classes act as singletons. With current PHP 
5.3 feature-set this is a problem. Extending from a common Singleton class is not 
possible for class B as PHP OOP model is heavily influenced by Java and is limited to 
only a single parent class in the inheritance tree. In a language like C++ one could 
solve this issue with templates or multiple inheritance (mixins in other languages) – 
none of which are available in PHP.

While traits are technically different from mixins – they are both designed to fill 
the same gap left by a single-parent inheritance model:

trait Singleton {
    public static function getInstance() { ... }
}

class A {
    use Singleton;
    // ...
}

class B extends ArrayObject {
    use Singleton;
    // ...
}

// Singleton method is now available for both classes
A::getInstance();
B::getInstance();

As the original author of the patch Stefan Marr pointed out – traits are nothing more 
but a compiler assisted copy and paste. Common functionality can be grouped inside a 
trait definition and then included within a class with use statement.


Conflicts and Aliases
(以下略)

■_ プログラマーが知っておくべき数値

Numbers every programmer should know : programming これと似たようなもので別のものをみた覚えがあるのだけどどこだったか。


The Axis Of Eval: Numbers Everybody Should Know


Numbers Everybody Should Know

Julian Hyde graciously transcribed the following table from Jeff Dean's Stanford talk:

L1 cache reference	0.5 ns
Branch mispredict 	5 ns
L2 cache reference 	7 ns
Mutex lock/unlock 	25 ns
Main memory reference 	100 ns
Compress 1K bytes w/ cheap algorithm 	3,000 ns
Send 2K bytes over 1 Gbps network 	20,000 ns
Read 1 MB sequentially from memory 	250,000 ns
Round trip within same datacenter 	500,000 ns
Disk seek 	10,000,000 ns
Read 1 MB sequentially from disk 	20,000,000 ns
Send packet CA->Netherlands->CA	150,000,000 ns

この種の数値とは性質が違うけど、 覚えておくといいんじゃないかなあと思う数値のひとつは 0.301 かな。 なんの数値なのかは内緒(笑)

■_


一つ前へ 2010年11月(中旬)
一つ後へ 2010年12月(上旬)

ホームへ


リンクはご自由にどうぞ。

メールの宛先はこちらkbk AT kt DOT rim DOT or DOT jp