トップページ⇒tech
1001コメント388KB

【激突】関数型言語 VS オブジェクト指向言語2

■ このスレッドは過去ログ倉庫に格納されています
0001営利利用に関するLR審議中@詳細は自治スレへ2012/04/07(土) 21:26:47.61
一般的には、オブジェクト指向型言語が優勢でが
一部には関数型言語を崇拝している人もいます

どちらが上なのか、この際はっきりさせましょう

前スレ http://toro.2ch.net/test/read.cgi/tech/1331328955/
0760デフォルトの名無しさん2012/05/13(日) 20:20:46.22
>>758
できる言語はあるかと聞いているのですが?
あとboolは関係ないですよね
0761デフォルトの名無しさん2012/05/13(日) 20:24:09.03
>>760
じゃあ Integer と (() -> a) -> a

それはともかく、関数型とか全然関係なくって
まともな静的型なら無理って言ってるんだけど、
動的型しか使った事無い馬鹿には分からないかな?
0762デフォルトの名無しさん2012/05/13(日) 20:25:17.06
>>761
だから、できない言語の事は聞いてなくて、出来る言語はあるかと聞いてるんですけど。
0763デフォルトの名無しさん2012/05/13(日) 20:29:16.10
>>762
スレ違いだし問題としても糞詰まらんから
どっか行けって言ってんだけど?
0764デフォルトの名無しさん2012/05/13(日) 20:29:54.03
何か値を返さなきゃならないみたいなので、>>757を修正
nilと値じゃなくてoption型使ってるけど

type System.Int32 with
    member x.Execute func = match x with 0 -> None | n -> func() |> Some

> (0).Execute (fun () -> "zero");;
val it : string option = None
> (1).Execute (fun () -> "one");;
val it : string option = Some "one"
> (1 - 1).Execute (fun () -> 1 - 1);;
val it : int option = None
0765デフォルトの名無しさん2012/05/13(日) 20:32:20.89
>>763
NGにしたいんでトリでも付けてもらえます?
スレ違い以前に話が通じないので
0766デフォルトの名無しさん2012/05/13(日) 20:42:57.75
>>763
まず日本語の通じないお前がどっか行けよ
0767デフォルトの名無しさん2012/05/13(日) 20:44:48.51
>>764
オブジェクトで出来てもあんまり嬉しくないんですが・・・
0768デフォルトの名無しさん2012/05/13(日) 20:46:00.83
>>765>>766
型付けの問題だって理解できない自分の低能さを
日本語の問題にすり替えるなよw
0769デフォルトの名無しさん2012/05/13(日) 20:52:46.02
>>761
「コンセントの付いている車はありますか?」
「軽トラなら無理です」
お前が言ってるのはこういう事だという自覚は有るのか?
普通は「あります」「ありません」この2択だろ
頭おかしいな
0770デフォルトの名無しさん2012/05/13(日) 20:53:58.75
>>767
Int32はラッパークラスとかではなく、プリミティブかつオブジェクトなんだけど。
まぁそれでもダメというならどうしようもない。
0771デフォルトの名無しさん2012/05/13(日) 20:55:35.08
>>764 のような Execute 的な関数を使うのってダメじゃね?
これアリなら難しくも何ともないじゃん


(|.) 0 _ = Nothing
(|.) x f = Just $ f ()

main = do
  print $ 0 |. (\_ -> "zero")
  print $ 1 |. (\_ -> "one")
  print $ (1 - 1) |. (\_ -> "zero")
  print $ (1 + 1) |. (\_ -> "two")
0772デフォルトの名無しさん2012/05/13(日) 20:57:08.31
>>770
すいません。
関数と互換性をもってて欲しいんですよ。
0773デフォルトの名無しさん2012/05/13(日) 21:06:51.99
>>771 >>772
てっきり拡張メソッド的なものを要求してるのかと思ってた。
Scalaなら暗黙型変換あるからできそうな気がする。
0774デフォルトの名無しさん2012/05/13(日) 21:08:02.77
>>773
なるほど。Scalaですか、調べてみます。
0775デフォルトの名無しさん2012/05/13(日) 22:46:41.69
で、Scalaなら出来たの?
0776デフォルトの名無しさん2012/05/14(月) 00:37:38.04
マイナー言語使い共が
可読性皆無のコード書く御題で
型付けの弱さを競うスレはここですか?

時代に逆行してて笑えるwww
0777デフォルトの名無しさん2012/05/14(月) 01:46:05.41
誰だって0と1は同じ型だと考えるのに、違った振る舞いをさせたいってのは、
何か前提がおかしいんだろうね。
元々何がしたかったのか聞ければよいんだけど、
彼にそういった振る舞いが出来るとも思えないしなぁ。
0778デフォルトの名無しさん2012/05/14(月) 07:07:11.76
うーん。一番良く分からんのは、>>767を読むと出題者は>>764を見て
オブジェクトとしてなら「出来ている」認定してるっぽい処だな。
0779デフォルトの名無しさん2012/05/14(月) 07:40:52.01
出題者がOOP厨だからオブジェクトには甘いだけだろ
別に不思議でもなんでもない

もちろん出題者は底なしのアホだけど
0780デフォルトの名無しさん2012/05/14(月) 17:54:42.36
お題:
等確率N種類のカードをコンプするのに必要なガチャ回数のM回試行時の頻度分布から、
最小および最大のガチャ回数と最多頻度のガチャ回数を抽出して出力するコードを書き、
N=10、M=1000000のときの結果とその算出にかかった時間を示せ。

遅い処理系ではMを減らした際の結果を示しても構わないがその旨を明記すること。
0781デフォルトの名無しさん2012/05/14(月) 18:47:07.65
OOPLでもメソッドの中は大体手続き型みたいなもんだから
関数型 VS 手続き型 って感じになりそう
0782デフォルトの名無しさん2012/05/14(月) 19:41:29.94
では手続き型の Squeak Smalltalk で。
最低 10ガチャ、最高 156ガチャ、頻度最多は 23ガチャで 45475回出現。
1.8GHz Core i7 で 66秒程度。(CogVM 使用)

| N M histo cards time |
N := 10.
M := 1000000.
histo := Bag new.
cards := 1 to: N.

time := [
   M timesRepeat: [
      | player |
      player := Bag new.
      [player add: cards atRandom; includesAllOf: cards] whileFalse.
      histo add: player size]
] timeToRun.

^{time. histo min. histo max. histo sortedCounts first} "=> {66128 . 10 . 156 . 45475->23} "
0783デフォルトの名無しさん2012/05/14(月) 19:54:50.29
>>778
これで、できてると言ってる訳ではなくて、
数値を関数化してラムダ演算をするのが目的であって
オブジェクトで雰囲気が近いことできても仕方ない
という事を書いたつもりです。

最終的な目標は>>759の様な(欲を言えばチャーチ数)演算が
できる言語を見つける事です。

>>775
よく知らないので、調べてる最中ですよ。
0784デフォルトの名無しさん2012/05/14(月) 20:17:53.30
チャーチ数?

型無しラムダな処理系なら、学生演習レベルのものならいくらでもあるだろ。
0785デフォルトの名無しさん2012/05/14(月) 21:01:05.79
チャーチ数が欲しいのか>>759が出来る何かが欲しいのかどっちだよ
0786デフォルトの名無しさん2012/05/14(月) 21:07:37.59
>>785
存在すればどちらでも構いません。
ただし誤解されてるかもしれませんが、
チャーチ数というのは、f x.x を直に表現できて
欲しいと思ってる訳ではなく。0なら f x.xと同じ振る舞いを
して欲しいという話で、今までの話とは大きく違いません。
チャーチ数と今までの話は、2以上の時、1回関数が評価されるのか、
2回評価されるのか程度の違いの意味で書いてます。
0787デフォルトの名無しさん2012/05/14(月) 21:14:35.72
間違えました

×2回評価されるのか
○その数だけ評価されるのか
0788デフォルトの名無しさん2012/05/14(月) 21:50:45.36
いよいよ何がしたいのか良く分からないが、
再起でよいんじゃないの?
0789デフォルトの名無しさん2012/05/14(月) 22:49:56.49
>787
型なしラムダ計算でやりたいことがかける?
もしそうならLazy Kやunlambdaを使えばできるな。
0790デフォルトの名無しさん2012/05/15(火) 00:51:10.23
lispならevalいじりゃ何とか出来そうな気がするが
関数名が数値型だったら特別扱いすりゃいいだけだろ
0791デフォルトの名無しさん2012/05/15(火) 08:00:22.83
>>790
変数名が値だったらって何か変だぞ

変数は単に置き換えるのが目的であって
置き換えた後にどのような演算が出来るかというと、確かに何でも出来ると思う
しかしLispは要らない
0792デフォルトの名無しさん2012/05/15(火) 10:10:16.80
関数名って書(ry
0793デフォルトの名無しさん2012/05/15(火) 10:31:41.96
定数0を(\ f x -> x)に置き換えることはできないかもしれない
変数zを(\ f x -> x)に置き換えることはできる
なら定数を使わない言語を考えるのが普通で
定数の定義を書きかえるのは変だ
0794デフォルトの名無しさん2012/05/15(火) 14:05:34.62
定数というか、リテラルかな。
いずれにしろ、リテラルの意味を再定義できる言語、というのは珍しいが、無いわけじゃない。
Forthなんかモード切り替えで、"100" というワードが 10 進にも 16 進にも解釈される、
っていう仕様だったと思ったし。
0795デフォルトの名無しさん2012/05/15(火) 16:30:18.62
>むちゃくちゃになっていたので直します。何度もすいません。
>( 0 (lambda () "true" ) ) 0関数はlambdaを評価せず、nilを返す
>( 1 (lambda () "true" ) ) 1関数はlambdaを評価し"true"を返す
>( 2 (lambda () "true" ) ) 2関数はlambdaを評価し"true"を返す

>( (- 1 1 ) (lambda () "true" ) ) 0関数を評価する事になるのでlambdaを評価しない
>( (+ 1 1 ) (lambda () "true" ) ) 2関数を評価する事になるのでlambdaを評価する

こう言ってるから、処理系の持ってる整数型はそのまま使いたいんだろうと思う。
その上で、整数値を関数としても定義したいと。
良く分からないのは、整数値を関数で定義せず、
引数で渡せばよさそうなものなのに、なぜそうしないかだな。
07967952012/05/15(火) 16:41:00.21
あー、だから、整数の無い処理系もNGだろうし、
単純に整数をfunctorにしたいんだろう。
分からないのは、普通ならパラメータで渡せば直ぐ済むのに、
なぜそうしないかだとおもう。
その辺の説明が何も無いから、誰も答えられないんだと思う。
0797デフォルトの名無しさん2012/05/15(火) 18:43:21.09
チャーチ数でも良いらしいので、Haskellでチャレンジ

http://ideone.com/0LiFz
0798デフォルトの名無しさん2012/05/15(火) 18:49:15.95
ついでに>>780
1.6GHz Core i5 で 3.5秒 (GHC 7.0.4)
最小10, 最大162, 最多頻度23(45003回)

import Control.Applicative
import Data.Ord
import Data.List
import Data.HashTable as H
import System.Random.Mersenne

cardNum = 10
iterateNum = 1000000

count n = (+ n) . sum . map (length . f) . zip [1..n-1]
  where f (x,p) = let q = fromIntegral x / fromIntegral n
                  in takeWhile (< p) $ iterate (\x -> x + (1-x) * q) q
07997982012/05/15(火) 18:50:05.32
続き

main = do
  ht <- new (==) hashInt :: IO (HashTable Int Int)
  gen <- newMTGen Nothing
  mapM_ (trial ht gen) [1..iterateNum]
  xs <- sort <$> H.toList ht
  print $ (fst $ head xs, fst $ last xs, maximumBy (comparing snd) xs)
  where
    trial ht gen _ = do n <- count cardNum <$> (randoms gen :: IO [Double])
                        incr ht n =<< H.lookup ht n
    incr ht k Nothing = H.insert ht k 1
    incr ht k (Just v) = H.update ht k (v + 1) >> return ()
0800デフォルトの名無しさん2012/05/15(火) 20:22:09.35
>>780
R
N = 10
M = 100000 (!= 1000000)
Intel(R) Atom(TM) CPU N455 @ 1.66GHzで、
user system elapsed
180.467 0.084 180.719
最小 10、最大 130、最頻値は4548回の23。

gacha <- function(N, M) {
  print(system.time(t <- table(sapply(1:M, function(x) {
    count <- 0
    card <- logical(length=N)
    while(!all(card)) {
      count <- count + 1
      card[sample(N, size=1)] <- T
    }
    count
  }))))
  print(t[1])
  print(t[length(t)])
  print(t[which.max(t)])
}
0801デフォルトの名無しさん2012/05/15(火) 23:05:25.41
>>780
JavaScriptで多分ベタなOOP
Core2Duo(3.16GHz) Node.js(Windows)で
試行回数=1000000 所要時間=1398msec 最小=10 最大=144 平均=29 最頻=23(44951回)

ソース(※こっちは10000回)
http://ideone.com/DkeKE
0802デフォルトの名無しさん2012/05/15(火) 23:14:59.88
>>801
コードそのものよりもNode.jsがspidermonkeyより
44倍も速いのが興味深い
0803デフォルトの名無しさん2012/05/15(火) 23:30:56.13
Node.jsの中身のV8はJIT持ってるので
0804デフォルトの名無しさん2012/05/15(火) 23:32:18.16
1000000回も試行してるのに各人の最大値がおおきくばらついてるのが気になる。
各処理系の乱数の質の差が反映されているのか。
0805デフォルトの名無しさん2012/05/15(火) 23:52:23.55
何度も気軽に試せるようにCで書いてみた
さすがに速い

http://ideone.com/WPpbW

同じプログラムでも試行ごとに最大値はばらつくみたいね
0806デフォルトの名無しさん2012/05/16(水) 00:08:03.51
書き捨てなのは分かるけど、
せめて void gacha(int n, int m, RESULT *r); くらいにロジック分離しようぜ。
0807デフォルトの名無しさん2012/05/16(水) 12:23:32.14
>>803
しかもx86,x64,ARMに特化されたかなり先進的なJITだしね。
0808デフォルトの名無しさん2012/05/16(水) 13:57:24.59
ところで、数値を関数にしたいと言ってた彼は
結局Scalaで望みのことが出来たの?

それとも、実はSmalltalk辺りのOOPLで
やりたいことは既に出来てて、あとは
「関数型言語で出来ないことがOOPLで出来る!OOPサイコー!!」
って言い出すタイミングをはかってるの?
0809デフォルトの名無しさん2012/05/17(木) 16:49:24.16
Smalltalkは実社会で何の価値もないので
せめてこういうスレのトイプログラムの御題でくらいは
存在感を出さないとね。
0810デフォルトの名無しさん2012/05/17(木) 16:53:53.95
既に引退の身ですが、現役の時はすごかったんですよ(棒読み
0811デフォルトの名無しさん2012/05/17(木) 19:18:25.65
Intは関数ではないけど forall a. ((Int -> a) -> a) は関数だよ
Intに限らず任意の型で同じことが言えるのでチャーチ数は関係ない
0812デフォルトの名無しさん2012/05/17(木) 19:53:36.50
関数を数リテラルとして表現できて
加算や減算ができるなら
チャーチ数で無くても文句無いんだろう、多分

ただし>>797のプログラムはチャーチ数でないと
加算減算が出来ないから成立しない
0813デフォルトの名無しさん2012/05/17(木) 20:37:57.99
静的言語 VS 動的言語スレとかないの?
0814デフォルトの名無しさん2012/05/18(金) 00:44:10.29
まずJavaかHaskellのどちらかを潰さないと
静的言語は一貫していない
0815デフォルトの名無しさん2012/05/18(金) 01:54:17.00
関数型言語も一貫してないから
それぞれで代表一つ以外は全て潰し
最後に決定戦とすべき
0816デフォルトの名無しさん2012/05/18(金) 07:15:42.96
クラスベースOOとプロトタイプOOの潰し合いとか
スレが幾つ在っても足りんだろ
0817デフォルトの名無しさん2012/05/18(金) 07:52:12.43
プロトタイプとか無視していいぞ
評判の良いやつだけで潰しあえ
0818デフォルトの名無しさん2012/05/18(金) 07:55:27.26
Javascript「えっ」
0819デフォルトの名無しさん2012/05/18(金) 08:10:51.95
動的言語の代表はLLバトルロワイヤルスレの勝者ですか?
0820デフォルトの名無しさん2012/05/18(金) 21:20:26.37
Scalaスレ見てたんだけど、リストがソート済みかどうか
判定する関数を書くのに苦労してた。
短く書けるとウワサのScalaですらそのレベルなんて、
静的型付け言語はダメダメだなぁ。
0821デフォルトの名無しさん2012/05/18(金) 21:56:20.82
scalaで書くとこんな感じかな。

def sorted[T:Ordering](xs:List[T]) : Boolean =
 xs match { case x::y::zs => implicitly[Ordering[T]].lt(x, y) && sorted(y::zs); case _ => true }

型指定は面倒だね。
暗黙の型変換を定義すればもう少し簡潔になるかも。
0822デフォルトの名無しさん2012/05/18(金) 22:32:39.96
おお、想像以上に型注釈がうざいw
0823デフォルトの名無しさん2012/05/18(金) 22:38:39.58
関数プログラミング的に、比較演算子を引数で受け取るようにすると少しましかも。

def sorted[T](xs:List[T], f:(T,T)=>Int) : Boolean =
 xs match { case x::y::zs => f(x, y) >= 0 && sorted(y::zs); case _ => true }
0824デフォルトの名無しさん2012/05/18(金) 22:44:02.03
ソート済か?なんて調べる発想が変だろ
0825デフォルトの名無しさん2012/05/18(金) 22:52:26.14
そんなこと無いだろ
二分探索を使う前とかに調べるじゃん
0826デフォルトの名無しさん2012/05/18(金) 22:53:00.87
>>823
それなら十分許容範囲だね。
0827デフォルトの名無しさん2012/05/18(金) 22:55:38.83
ていうかscalaって型推論って
引数と返り値の型は推論してくれないんだっけ?
0828デフォルトの名無しさん2012/05/18(金) 22:56:20.29
つ amortized sortでcheck inする必要がある時にtestしながらinsert sort
0829デフォルトの名無しさん2012/05/18(金) 23:33:06.68
>>825
ソートしとけよ
してないなら、まずソートしろ
0830デフォルトの名無しさん2012/05/18(金) 23:37:28.63
実際にソートするのとソート済みか確認するのが
同じ計算量だと思ってる男の人って...
0831デフォルトの名無しさん2012/05/18(金) 23:57:52.40
動的言語は静的言語より3〜5倍くらい短く書けないと
静的型チェックのメリットと釣り合わない
0832デフォルトの名無しさん2012/05/19(土) 00:44:54.27
でもあまりに短いと、それはそれで暗号になっちゃうんだよ。
0833デフォルトの名無しさん2012/05/19(土) 01:06:57.97
チェックは保険だろ
釣り合う物を取り返そうとしたら保険の意味がなくなる
0834デフォルトの名無しさん2012/05/19(土) 01:10:31.94
>>830
ソートされてるかどうかわからない
なんてことになる設計がダメだしされてるんだろ
0835デフォルトの名無しさん2012/05/19(土) 01:27:57.13
はいはい
オブジェクト指向で静的型のJavaですよー

public static<T extends Comparable<? super T>> boolean sorted(List<T> xs) {
for (int i = 1; i < xs.size(); i++) {
if (xs.get(i-1).compareTo(xs.get(i)) > 0) return false;
}
return true;
}
0836デフォルトの名無しさん2012/05/19(土) 03:31:46.88
isSorted xs = and $ zipWith (<=) xs $ drop 1 xs
0837デフォルトの名無しさん2012/05/19(土) 04:29:01.17
"Squeak Smalltalk"

SequenceableCollection >> isSorted
   self overlappingPairsDo: [:a :b | a <= b ifFalse: [^false]]. ^true
0838デフォルトの名無しさん2012/05/19(土) 07:54:30.96
大小関係を満たさないのが途中で分かってもソコで計算終了せず
全ての隣り合う組を比較するようなダメコードを書くダメプログラマは
まさかこのスレには居ないよね?
0839デフォルトの名無しさん2012/05/19(土) 09:09:24.99
>>831
コードの長さはあまり関係なくないか?
考えた処理をサクサクとコード化できるか、だと思う
0840デフォルトの名無しさん2012/05/19(土) 10:06:00.60
重要なのは品質,保守性,開発効率だな

>>833
保険というか、コンパイラに一部の整合性のチェックを任せられるので
作業量増加と引き換えに、開発者が気を使う要素が減る
トレードオフで負担を変化させる

[作業量が減る][気を使う要素が減る]どちらの開発効率が良いかは
ケースバイケースだと思うが
0841デフォルトの名無しさん2012/05/19(土) 10:58:17.40
単位が一貫していない量を比較するのは難しいね
0842デフォルトの名無しさん2012/05/19(土) 15:29:10.77
>>838
もしかしてHaskellについて言ってるなら、遅延評価だから途中で止まる
無限リストで試せば分かる

Prelude> isSorted [1,0..]
False
0843デフォルトの名無しさん2012/05/20(日) 09:55:31.76
>>838
もしかしてSmalltalkについて言ってるなら、どうせ遅過ぎてウンコだから
そんなところ気にしても仕方ない

メッセージング(笑)
0844デフォルトの名無しさん2012/05/20(日) 13:40:56.75
^falseってあるとおり、Smalltalkのもふつうに止まる。
Smalltalkerかアラン・ケイになんか嫌なことでもされたか?
0845デフォルトの名無しさん2012/05/20(日) 13:47:01.48
遅延評価ってこんなにすごいのに
なんで使うことってあまりないんだろうね。
0846デフォルトの名無しさん2012/05/20(日) 14:11:04.26
Haskell使ってれば基本は全部遅延評価だけど?
0847デフォルトの名無しさん2012/05/20(日) 14:15:09.70
関数型言語でも、効率とか速度とか(必要なら汚らしさとか)を度外視すれば、mainで
「N種類のカードをアトランダムにコンプするまで引く作業をM回繰り返して集計」
ってただそれだけのことをSmalltalkみたいにそのまんまに書き下すことも可能なのかな。
HaskellにもMultiSet(SmalltalkでいうところのBag)とかあるよね?
0848デフォルトの名無しさん2012/05/20(日) 14:18:36.97
>>846
内部で勝手に遅延評価してるってだけだから
そんな言語の話をしたってしょうがない。

遅延評価をしたい場面が無いって話をしてる。
0849デフォルトの名無しさん2012/05/20(日) 14:34:00.38
>>809
あ?政府から海運業、通信、保険、金融、音響。
お前がしらんだけで実際いろんな所で使われとるわ。
英語が読めん奴が覆いから日本人の開発者が少ないだけ。
0850デフォルトの名無しさん2012/05/20(日) 14:34:50.90
値を参照しようとするとその値の計算が始まる、
こういうイデオムはgetterのあるオブジェクト指向プログラミングだとよくある。
getterがないと値参照から関数呼び出しを引き起こせないので、
単に関数呼び出しをすることになってしまう。
ただしそのような場合でも遅延評価イデオムと呼ぶ場合もある。
例えば上に出たamotized sortは挿入時にやるべき並び替えを最後までやらずに、
細かい部分はサボって後回しにして、後でまとめてやっている。
こういうのは遅延実行の一種。
0851デフォルトの名無しさん2012/05/20(日) 14:42:50.92
Smalltalkが現実で使われてないと言ってるヤツは、
Smalltalkという実行環境が現存してると思ってんだろ
うんで「Smalltalkでググっても見つからないよー」とw
Linuxと同じように純粋なSmalltalkは存在しないのにな。
0852デフォルトの名無しさん2012/05/20(日) 14:45:54.09
>>851
よしわかった。
具体t系な実行環境を言ってくれ。

それに対して、使われているかいないか
判断することにしよう。
0853デフォルトの名無しさん2012/05/20(日) 14:52:32.76
>>852
Visual Works.
VA Smalltalk.

Squeak.
Pharo.
GNU Smalltalk.
0854デフォルトの名無しさん2012/05/20(日) 14:56:00.00
VA Smalltalkの前身であり、Eclipseの前身でもある
VisualAgeは、各種言語の統合開発環境でもあり
Smalltalkの実行環境なんだよな。
emacsのlispをSmalltalkに置きかえたと考えればわかりやすい。
0855デフォルトの名無しさん2012/05/20(日) 15:01:44.14
>>853-854
よし、じゃあ次にどれくらい使われてるか
公平に判断するために、どこかが発表した
ラインキングを見てみるとしよう。

何か希望はあるかね?
ないならこちらで適当なランキングを
もってくるが、それだと不満だろう?
0856デフォルトの名無しさん2012/05/20(日) 15:08:03.81
>>855
なんで回答者に左右されるランキングが必要なんだ?
製品のダウンロード件数でも調べてくりゃいいじゃねぇか。
0857デフォルトの名無しさん2012/05/20(日) 15:08:38.06
あと販売数も。
0858デフォルトの名無しさん2012/05/20(日) 15:16:04.37
MUMPSとかランキングにまず上がらんけど
物流や医療じゃ高確率で見かけるからな
その癖ググっても資料がでてこないから苦労する

あとCOBOLもまずランキングにのる事はないが
未だに金融じゃ必ずと言っていいほど見かける

ネットで見かける需要が現実の需要と
一致してるとは限らんよ(COBOLはみんな
嫌々使ってんだろうけど)
0859デフォルトの名無しさん2012/05/20(日) 15:18:14.23
>>856
> なんで回答者に左右されるランキングが必要なんだ?

個人の意見じゃ、回答者(個人)に
左右されるからじゃないかw

同じ回答者でも、たくさんの意見を聞いたほうが良い。
回答者(多数)の方が信頼性が高いって言ってるんだよ。
■ このスレッドは過去ログ倉庫に格納されています