[表示 : 全て 最新50 1-99 101- 201- 301- 401- 2chのread.cgiへ]
Update time : 05/09 13:54 / Filesize : 121 KB / Number-of Response : 478
[このスレッドの書き込みを削除する]
[+板 最近立ったスレ&熱いスレ一覧 : +板 最近立ったスレ/記者別一覧] [類似スレッド一覧]


↑キャッシュ検索、類似スレ動作を修正しました、ご迷惑をお掛けしました

【.NET】F#について語れ【OCAML】



1 名前:デフォルトの名無しさん mailto:sage [2007/08/02(木) 14:03:05 ]
MSResearchから出てきた.NETで使える関数型言語のひとつF#
OCAMLの流れを汲むこの言語、いろいろと面白そうなことができそう。
まだまだ英語の情報しかないこの言語について、幅広く語れ。

research.microsoft.com/fsharp/fsharp.aspx

331 名前:デフォルトの名無しさん [2008/08/30(土) 14:29:36 ]
>>330
ぷっ
理解できないからって・・・w

332 名前:デフォルトの名無しさん mailto:sage [2008/08/30(土) 18:29:51 ]
>>330
ぷっ
理解できないからって・・・w

333 名前:デフォルトの名無しさん mailto:sage [2008/08/30(土) 21:27:29 ]
>>330
理解できないからぶってぶって・・・w


334 名前:デフォルトの名無しさん mailto:sage [2008/08/31(日) 18:01:34 ]
>>333
は?

335 名前:デフォルトの名無しさん mailto:sage [2008/08/31(日) 18:06:01 ]
>>333
は?

336 名前:デフォルトの名無しさん mailto:sage [2008/08/31(日) 18:14:01 ]
>>333
は?

337 名前:デフォルトの名無しさん mailto:sage [2008/09/01(月) 00:19:39 ]
俺もぶってほしい(*´∀`*)

338 名前:デフォルトの名無しさん mailto:sage [2008/09/07(日) 01:30:34 ]
Detailed Release Notes for the F# September 2008 CTP release
blogs.msdn.com/dsyme/archive/2008/08/29/detailed-release-notes-for-the-f-september-2008-ctp-release.aspx

Microsoft F#, September 2008 Community Technology Preview
www.microsoft.com/downloads/details.aspx?familyid=61ad6924-93ad-48dc-8c67-60f7e7803d3c&displaylang=en&tm
F# 1.9.6.2

339 名前:デフォルトの名無しさん mailto:sage [2008/09/08(月) 13:19:45 ]
ブログネタとかでもだんだん見るようになってきたけど、
OCaml派生として使ってるやつばっかりだな
OCaml知らない俺から見るとなんかぜんぜんF#っぽくないし、
そっち系は面白くならないと思うが。
.NETライブラリ使ってるやつとかあんまいないのかね



340 名前:デフォルトの名無しさん mailto:sage [2008/09/08(月) 20:26:38 ]
>>339
windows上の設置が簡単なocamlって扱いだからでないか?
人に渡すにしてもランタイムいらんし。

341 名前:デフォルトの名無しさん [2008/09/11(木) 11:17:55 ]
CTPになって2008しかインストール出来なくなったのはいいけど、
前からあったサンプルプログラムがコンパイルできないよ。

CTP用のサンプルはDirectX関係がコンパイル出来ないし、
スレッド周りとか勉強したいんだけどなぁ。


342 名前:デフォルトの名無しさん mailto:sage [2008/09/19(金) 15:40:17 ]
.netライブラリなんて他と同じように使えばいいだろ

343 名前:デフォルトの名無しさん mailto:sage [2008/09/22(月) 23:34:56 ]
こうですか?わかりません
をVB.NET風に書こうと思ったけどめんどくさかったのでやめた



344 名前:デフォルトの名無しさん mailto:sage [2008/09/24(水) 21:44:32 ]
#useってデバッグ用途とかでかなり便利だったのにな。
#loadじゃ関数とかアクセスできないし、
再起動してfsi --useも起動の時間がかかりすぎて代わりにならない。
復活してくれんかな。

345 名前:デフォルトの名無しさん mailto:sage [2008/10/12(日) 13:14:30 ]
.Net使ってるとWin32APIが使いたい場面が多々出てくるが
細かいところでわからんことが多い
C#⇔F#コード対応表みたいなのがほしいわ
フック書きてぇ


346 名前:デフォルトの名無しさん [2008/10/13(月) 09:33:20 ]
F#で学ぶ関数型プログラミング入門
「関数型プログラミングの主な概念とF#での利用例」

codezine.jp/article/detail/3041

347 名前:デフォルトの名無しさん mailto:sage [2008/10/13(月) 15:13:21 ]
>>345
P/Invoke宣言だけはC#で書いてしまえばいいんでない?

348 名前:デフォルトの名無しさん mailto:sage [2008/10/13(月) 16:01:48 ]
↓こんなのがC#側で定義出来るってこと?
[<DllImport("user32.dll",EntryPoint="SetWindowsHookEx",SetLastError=true)>] let ...

(たぶんdelegateキーワード使う)HOOKPROCの型がわからないので
実際そこでも詰まってるんだが、それがわかったとしても
SetHookの返り値をIntPtr.Zeroとどうやって比較するのかとか
わからない箇所あって、若干諦めてる

ところでF#にはいわゆるbreakやcontinueはないんですかね
for文の中でreturnするケースは手続き型の既存資産には多いと思うが
F#に移植しようと思ったら再帰等でロジックを考え直す必要があるとすると
作業コストが高い
break,last,return,continueなんかで言語仕様検索しても
それらしいのは見つからんね

349 名前:デフォルトの名無しさん mailto:sage [2008/10/13(月) 16:12:45 ]
自己レス。残念だけどなさそうだわ
ttp://cs.hubfs.net/forums/thread/7118.aspx



350 名前:デフォルトの名無しさん mailto:sage [2008/10/13(月) 19:17:02 ]
>>348
移植コストを下げることに意味はない
カエレ

351 名前:デフォルトの名無しさん mailto:sage [2008/10/13(月) 19:27:22 ]
アローつくれば、順次処理、条件分岐、繰り返しができるお

352 名前:デフォルトの名無しさん mailto:sage [2008/10/13(月) 19:43:07 ]
>>350 なぜ

353 名前:デフォルトの名無しさん mailto:sage [2008/10/14(火) 09:33:33 ]
逆に、何でソースコードレベルで移植しようとか思うんだ?
対象環境に言語処理系が無いとかなら分かるけど、.NETだぞ?
普通、DLL作ってFFI経由で呼び出しするだろ。

なんだか、同じ言語で書くことにこだわりすぎてる気がするけど。

354 名前:デフォルトの名無しさん [2008/10/14(火) 22:37:30 ]
>>345 そんな単純な置き換えができるのはVB⇔C#とかだけだろ
F#は関数型言語で全然違うから、考えを変える必要があるかもしれない

むしろC#とF#のコードの一対一対応表がつくれるくらい似てる言語なら、F#いらねーだろ。

355 名前:デフォルトの名無しさん mailto:sage [2008/10/14(火) 22:44:09 ]
そんなたいそうな理由があるわけじゃなくて、
単に楽したいと思ったんだが、気に障ったならすまない

356 名前:デフォルトの名無しさん mailto:sage [2008/10/15(水) 09:36:44 ]
>>355
関数型言語によるプログラミングスタイルの一種に
breakやcontinueを使わずに制御構造をくっつけていくという一派がある。
それを調べてみると面白いと思うよ。

listモナドとかmaybeモナドとか>>351の言ってるarrowとか。
ttp://d.hatena.ne.jp/r-west/20070720/1184946510

慣れるとむしろbreakやcontinueイラネになる。

357 名前:デフォルトの名無しさん [2008/10/15(水) 14:47:07 ]
もしかして、今の新しいバージョンのF#って2008製品版もってないと
入れられなくないですか・・・?('A`)

>>356
ほー、参考になる

358 名前:デフォルトの名無しさん mailto:sage [2008/10/15(水) 17:36:17 ]
前のバージョンなら Express でも入れられたの?
プラグインとか機能追加系は製品版じゃなきゃ基本無理。


359 名前:デフォルトの名無しさん mailto:sage [2008/10/15(水) 22:56:25 ]
よく調べもせず臆面なくそんなレスを…



360 名前:デフォルトの名無しさん mailto:sage [2008/10/16(木) 20:30:58 ]
そのための2ch

361 名前:デフォルトの名無しさん mailto:sage [2008/10/16(木) 22:05:54 ]
356見て、出来たらF#でarrowを表現してみたいと思ったがさっぱりだ
関数a->bを渡すとarr a bが出来て、
arr a bの型に対する操作が色々あるんだろうと思うんだが
arr a bの型に当たる物はf#ではどう表現すれば良いのか
'a 'b tみたいに複数のジェネリックな型を持つことになる?

もしかしてHaskellのほうが抽象度が高いことができる?

362 名前:デフォルトの名無しさん [2008/10/16(木) 22:07:12 ]
>>358
2008はもってないんだよね・・・うpでとするいい機会だ

363 名前:デフォルトの名無しさん mailto:sage [2008/10/17(金) 07:35:28 ]
>>361
higher kind genericsというやつで、F#の型システムでは再現は無理ぽ。(´・ω・`)
F#もどきで書くと、こんな感じのものが必要。

Arrow<'arr<'a, 'b>>

364 名前:デフォルトの名無しさん mailto:sage [2008/10/17(金) 19:13:35 ]
なるほど、非常に参考になった。
Haskellは進んでるな

365 名前:デフォルトの名無しさん mailto:sage [2008/10/18(土) 10:44:02 ]
>>357, >>358, >>362
Visual Studio 2008 Shell (integrated mode) Service Pack 1
www.microsoft.com/downloads/details.aspx?FamilyID=2e9a8c35-eb3d-43eb-9122-a5ec195cd7bb&DisplayLang=ja

366 名前:デフォルトの名無しさん [2008/10/18(土) 16:24:25 ]
>>365
Thanx。shell runtime入れりゃよかったのね

367 名前:デフォルトの名無しさん mailto:sage [2008/11/01(土) 12:44:35 ]
手続き型べったりの人間には (|>) を多用すると評価順序がわからなくなって混乱するんだぜ

>>123とか

let _ = List.iter ((|>) ()) (List.map ((delay >> flip) (printf "closure %d\n" )) [1..10])

とかけば (unit -> unit) unit が10回ってわかるんだが…

368 名前:デフォルトの名無しさん mailto:sage [2008/11/03(月) 11:54:03 ]
これでいいんじゃね?
Seq.iter (fun n -> printf "closure %d\n" n) [1..10]

369 名前:デフォルトの名無しさん mailto:sage [2008/11/08(土) 22:41:18 ]
素人です。Expert F#読んでてわからないことがあったので質問

type Attempt<'a> = unit -> 'a option
let runAttempt (a:Attempt<'a>) = () |> a

type AttemptBuilder() =
  member b.Return(x) = fun () -> Some x
  member b.Bind(p, rest) = match runAttempt p with None -> (fun () -> None) | Some x -> rest x
  member b.Let(p, rest) = rest p

let attempt = new AttemptBuilder()
let failIfBig n = attempt { if n>1000 then return! (fun () -> None) else return n }

とあったとき、これ↓を de-sugar しろって問題なんだけど、
let sumIfBothSmall (i1, i2) =
  attempt { let sum = ref 0
   let! n1 = failIfBig i1
   do sum := sum.Value+n1
   let! n2 = failIfBig i2
   do sum := sum.Value+n2
   return sum.Value }

これ↓であってるかな?
let sumIfBothSmall2 (i1, i2) =
   attempt.Let(ref 0, (fun sum ->
    attempt.Bind(failIfBig i1, (fun n1 ->
     attempt.Bind(attempt.Return(sum := sum.Value+n1), (fun () ->
      attempt.Bind(failIfBig i2, (fun n2 ->
       attempt.Bind(attempt.Return(sum := sum.Value+n2), (fun () ->
        attempt.Return sum.Value))))))))))

見づらくて申し訳ない…



370 名前:デフォルトの名無しさん mailto:sage [2008/11/10(月) 23:15:20 ]
こうじゃない?
let sumIfBothSmall2 (i1, i2) =
  attempt.Let(ref 0, (fun sum ->
   attempt.Bind(failIfBig i1, (fun n1 ->
    attempt.Let(sum := sum.Value+n1, (fun () ->
     attempt.Bind(failIfBig i2, (fun n2 ->
      attempt.Let(sum := sum.Value+n2, (fun () ->
       attempt.Return(sum.Value)))))))))))

ここ見る限り
blogs.msdn.com/dsyme/archive/2007/09/22/some-details-on-f-computation-expressions-aka-monadic-or-workflow-syntax.aspx

371 名前:369 mailto:sage [2008/11/15(土) 21:52:50 ]
あーunit -> 'a option のコンテナってことか
ようやく理解できたような
ありがとう

372 名前:デフォルトの名無しさん mailto:sage [2008/11/23(日) 10:37:08 ]
C++のvectorみたいなコンテナってある?
Microsoft.FSharp.Collections.ResizeArrayがそうかと思ったら、
Note: an abbreviation for List<'a>て書いてあたよ

373 名前:デフォルトの名無しさん mailto:sage [2008/11/23(日) 12:58:16 ]
ResizeArray でいいんじゃないのん?
Microsoft.FSharp.Collections.List<'a> と System.Collections.Generic.List<'a> は別物

ttp://research.microsoft.com/fsharp/manual/FSharp.Core/Microsoft.FSharp.Collections.html

374 名前:デフォルトの名無しさん mailto:sage [2008/11/27(木) 09:16:40 ]
ああ、Listって名前だから勘違いしたけどインデックスアクセスはO(1)なんだな


375 名前:デフォルトの名無しさん mailto:sage [2008/11/29(土) 21:53:44 ]
System.Windows.Forms.dllを参照したいんですが、.NETのVersion3.5には見つかりませんでした。
フォームを表示するアプリケーションを作る場合、現状では.NET Version2のSystem.Windows.Forms.dll
を参照するしかないんでしょうか?

376 名前:375 mailto:sage [2008/11/29(土) 22:24:55 ]
自己解決しました。

アセンブリ System.Windows.Forms
.NET Framework 3.5, .NET Framework 3.0, .NET Framework 2.0 のメンバ
C:\WINDOWS\Microsoft.NET\Framework\v2.0.50727\System.Windows.Forms.dll

と書いてあったので、今の設定で良さそうです。

377 名前:デフォルトの名無しさん [2008/12/05(金) 18:55:21 ]
今、日本がピンチです。
messages.yahoo.co.jp/bbs?.mm=GN&action=5&board=552022058&tid=cf9qa4nhbfffca5ga5b&sid=552022058&mid=83344
sora1975.blog88.fc2.com/blog-entry-144.html
リンク先を見て危機を感じるなら、コピペを貼ってください。



378 名前:デフォルトの名無しさん [2008/12/11(木) 20:42:09 ]
Foundation of F#の92ページのサンプルってビルド失敗しないか?
IEnumerable.iterで怒られる。iterなんてねーよって。

379 名前:デフォルトの名無しさん [2008/12/11(木) 20:46:53 ]
Seqにしたら動いた。。



380 名前:デフォルトの名無しさん [2008/12/12(金) 19:54:50 ]
F#の時代がクル━━━━━━(゚∀゚)━━━━━━ !!

正式発表:Visual Studio 2010がF#でシップ予定 - InfoQ
www.infoq.com/jp/news/2008/12/FSharp-Release

381 名前:デフォルトの名無しさん [2008/12/12(金) 20:01:17 ]
WindowsではC++は消え行く運命か?

382 名前:デフォルトの名無しさん mailto:sage [2008/12/12(金) 20:23:12 ]
何でそう思ったのか知らんけど、当面は残るから心配する必要は無い。
まぁでも、Windows向けに開発するなら.NETにも触れといた方がいいとは思う。

383 名前:デフォルトの名無しさん mailto:sage [2008/12/12(金) 21:48:11 ]
>>380
機能プログラミングって・・・w

384 名前:デフォルトの名無しさん mailto:sage [2008/12/12(金) 22:14:33 ]
F#はOCamlのコード書くために使うわ

385 名前:デフォルトの名無しさん mailto:sage [2008/12/13(土) 10:57:24 ]
>J#と全く同様の方法で、
ざわ… ざわ…

386 名前:デフォルトの名無しさん mailto:sage [2008/12/27(土) 00:41:54 ]
>>384
let 〜 andができないのこまらね?

387 名前:デフォルトの名無しさん [2008/12/27(土) 06:37:35 ]
今後MFC使う場面ってあるの?

388 名前:デフォルトの名無しさん mailto:sage [2008/12/27(土) 12:34:30 ]
質問です。
ExpertF#に以下のクラス定義があります。

type Vector2D(dx: float, dy: float) =
let len = sqrt(dx * dx + dy * dy)
member v.DX = dx
member v.DY = dy
member v.Length = len
member v.Scale(k) = Vector2D(k*dx, k*dy)
member v.ShiftX(x) = Vector2D(dx=x+dx, dy=dy) (* @ *)
member v.ShiftY(y) = Vector2D(dx=dx, dy=y+dy) (* A *)

@とAのところで引数を指定するのにdx=x+dxのようにしてい
ますが普通にx+dxではいけないのでしょうか?こちらでも
同じように動作しました。dx=x+dxの方法には他に意味が
あるのでしょうか?

389 名前:デフォルトの名無しさん mailto:sage [2008/12/27(土) 13:28:37 ]
名前指定してるから引数の順番入れ替えても許されるとかそういう利便性の話では



390 名前:デフォルトの名無しさん mailto:sage [2008/12/27(土) 14:29:25 ]
>>389
レスどうもです。
やってみました。確かにそういう利便性がありました。
ありがとうございました。

391 名前:デフォルトの名無しさん mailto:sage [2008/12/27(土) 18:52:50 ]
>>380
VSでは単独での使用が想定されてないとか
アプリケーションのコアを構築するためとか
どういう意味なのかね。想定場面がよくわからん
だいたいC#VBからF#の関数呼ぶのも一苦労なんだけど。
VSなしじゃ使い物にならなくなるってことかな
CLR上のLL的ポジションでいて欲しかったんだけどなあ


392 名前:デフォルトの名無しさん mailto:sage [2008/12/28(日) 22:58:56 ]
>>391
F# にはデザイナ ツールが含まれない。
つまり、WinForm やら ASP.NET Page やらをポトペタで開発できない。
ついでにいえば型付きデータ セットも、やるならコードごりごり書くしかない。
やるならやればいいけど。やりたい?それ?やりたくないよね?
じゃそういう部分は C#/VB.NET に任せて、他のコアな部分を F# で書くといいよ。
の意。

>>386
ふつうに書けるけど。なんか別の意味か?

let rec even n =
    if n = 0 then true else odd (n - 1)
and odd n =
    if n = 0 then false else even (n - 1)

393 名前:デフォルトの名無しさん mailto:sage [2008/12/29(月) 07:09:17 ]
>>392
ペタペタできないのか
じゃあ覚える意味あんまりないか

394 名前:392 mailto:sage [2008/12/29(月) 21:39:23 ]
あー。
念のため言っとくと「F# にはデザイナ ツールが含まれない」てのは VS2010 での話ね。
その次の VS とか、あるいは SP とかで、いずれは提供されるようになるものと思われ。
まあ、だとしても何年後だよって話だが。

395 名前:デフォルトの名無しさん mailto:sage [2008/12/29(月) 21:48:45 ]
その次の VS とか、あるいは SP とかで、F#がなくなる可能性・・・

396 名前:デフォルトの名無しさん mailto:sage [2008/12/30(火) 00:05:38 ]
.net自体物凄い歴史浅いのに、普遍化しとるねぇ

397 名前:デフォルトの名無しさん mailto:sage [2008/12/30(火) 01:21:32 ]
>>393
ごめんこれ釣りなのかどうかわからなくなってきたw

398 名前:デフォルトの名無しさん mailto:sage [2008/12/30(火) 01:39:42 ]
F#って型推論のせいでVSのインテリセンスの恩恵とかほとんどなさそうだな

399 名前:デフォルトの名無しさん mailto:sage [2008/12/30(火) 01:40:25 ]
>>392
ごめんこれ釣りなのかどうかわからなくなってきたw



400 名前:デフォルトの名無しさん mailto:sage [2008/12/30(火) 02:53:51 ]
>>392
普通にかけないんだけどなにが普通なんだ?
let x = 2 and y = 1;;

どういう仕様なんだと思ったけどandの前に改行がいるんだな

401 名前:デフォルトの名無しさん mailto:sage [2009/01/04(日) 21:03:52 ]
天才ども教えてくれ

let f a b c =
match a, b, c with
| Some a, Some b, Some c -> Some (a, b, c)
| _ -> None

と定義して、以下を実行すると value restriction と言われて結果が None に
ならない。

f (Some 3) None (Some 1.5)

分かる人いる?

そもそもvalue restrictionとは何なのか。

402 名前:デフォルトの名無しさん mailto:sage [2009/01/05(月) 22:53:07 ]
>>401
天才じゃないが答えてみる

関数 f の型は
    val f : 'a option -> 'b option -> 'c option -> ('a * 'b * 'c) option
になるわけだけど
    f (Some 3) None (Some 1.5)
という式を評価しても 'b の型は最後まで確定しないわな
それはよろしくない(→というのが超大雑把な value restriction の説明)
つまり 'b の型を明らかにすれば error を消せる
簡単には適当な型注釈をつけてやれば OK で
    f (Some 3) (None : int) (Some 1.5)
とか、あるいは
    (f (Some 3) None (Some 1.5) : (int * int * float) option)
とかすればよい
しかし通常は文脈から 'b が具体的な型に決まることが多い
    if true then f (Some 3) None (Some 1.5) else f None (Some 1) None
だもんで型注釈に頼るような場面は少ないように思われる

403 名前:デフォルトの名無しさん mailto:sage [2009/01/06(火) 03:16:50 ]
>>402
なるほど。理解できた。
(None : int)は(None : int option)の誤記だと
思うけど後者でうまくいった。全体に型注釈
をつけても良いんだね。thx。

404 名前:デフォルトの名無しさん [2009/01/17(土) 14:45:28 ]
age

405 名前:デフォルトの名無しさん [2009/01/23(金) 17:21:26 ]
もうだめぽ

406 名前:デフォルトの名無しさん mailto:sage [2009/01/31(土) 17:52:20 ]
とりあえず、Ocamlの開発環境について教えてください。
ライブラリの管理などを含めてノウハウを教えてください。
エディタはこれを使えとか、コンパイルするときはこうしろとか、成果物を配布するときはこうしろとか、
そういう諸々のプログラミング周辺の雑務について知りたいです。

407 名前:デフォルトの名無しさん mailto:sage [2009/01/31(土) 22:54:46 ]
関数型が難しいとかわからんとか言ってるヤツってなんなの?
けっこう他の言語はバリバリ使いこなしてるヤツに限ってそういうこと言う
なんかコードも書いてないのにわかんね言ってるように見えるんだけど

Web でかるーく拾いあさった断片的な知識並べてわかんない言われてもねえ

ほなたとえば OOP べんきょーするときもそんなやり方でやったんかと
『やさしい Java』読んだだけで Java できますゆー人間信用すんのかと
実践皆無の人間が OOP 知ってますゆーのを見てなんとも思わんのかと

もうね、自分の知らん新しいテクノロジ排除したいだけのオッサンちゃうんかと

プログラマ名乗るんならまずやってみろよと
知りたいのなら知る努力をしてみせろよと
その上でどこがどーゆー風にわからんのか言えと

408 名前:デフォルトの名無しさん mailto:sage [2009/01/31(土) 22:57:09 ]
難易度はともかく関数型は実用性が低いから困るんだよ

409 名前:デフォルトの名無しさん mailto:sage [2009/01/31(土) 22:57:51 ]
F# イラネ C# でイイじゃんゆうヤツには
精々逃げ切れるようにがんばれよと言っておきたい



410 名前:デフォルトの名無しさん mailto:sage [2009/01/31(土) 23:08:58 ]
>>408
言いたいことはわからないでもない
でも F# に限っていうなら使い分ければいいんでないの?
関数型と命令型と OOP と

411 名前:デフォルトの名無しさん mailto:sage [2009/02/01(日) 13:50:33 ]
アルゴリズムらしいアルゴリズムを自分で考えて(選択して)実装することなく、
APIを順に呼んでエラーチェックだけするようなプログラムばっか
書いている(書かされている)人には、勉強しようというモチベーションなど
湧かんだろうなー。

412 名前:デフォルトの名無しさん mailto:sage [2009/02/01(日) 22:26:24 ]
やぁ、関数型言語っぽいノリになってきましたね

413 名前:デフォルトの名無しさん mailto:sage [2009/02/01(日) 23:08:23 ]
>>411
職業プログラマの多くがそれに該当するのではないかと想像するが
それが仕事なんだから許してやってくれ
職業プログラマの世界では、そもそも「車輪の再生産」は悪とされている
自分でコードを書かなければ工数が減るしバグをつくりこむ機会もなくなるからな

414 名前:デフォルトの名無しさん mailto:sage [2009/02/01(日) 23:09:59 ]
うちのところはよく使うものも全然共通化してくれないんだけど・・・

415 名前:デフォルトの名無しさん mailto:sage [2009/02/01(日) 23:28:05 ]
世の中の「プログラマ」と名乗る人の結構な割合は関数型言語はおろか、
自力でtreeのトラバース程度もやる必要に迫られたことも無く、
2分探査のコードを書けと言われてバグ無く書けないこと位、みんな判ってるさ。
そして、F#を勉強する俺出世確実、とか思ってるやつもきっといない。

416 名前:デフォルトの名無しさん mailto:sage [2009/02/02(月) 00:08:16 ]
自分でアルゴリズムを考えるのが楽しいんだよ。それはもちろん。
でも他人がもう作っちゃったプログラムを同じように作ったってしょうがないだろ。
その労力を新しいものを作る事に傾けたほうが効率的だし、
自分が作るということは作ったものに責任を取るということなんだから、
そんな余計な事まで首突っ込んで余計な責任を取ることも無いだろ。

417 名前:デフォルトの名無しさん mailto:sage [2009/02/02(月) 00:27:17 ]
コレクションになんか突っ込んダリするだけですめばいいが、そこに永続化とか色んなフィーチャーを盛り込もうとすれば何処かの段階で全てを自分で作った方がきれいにまとまる段階が来ると思うがどうよ。

もちろん既存のオープンソースなどを使った方がいいのもわかるが、その仕様を自分の要望に合わせる時に無理があることも多いから。

自分で作るのも追っついてるうちはいいが本当に全てを作るわけにもいかずどこまで突き詰め、どこで妥協するのか考える毎日だが。

418 名前:デフォルトの名無しさん mailto:sage [2009/02/02(月) 22:11:53 ]
そうなんだよなー
出来合いの API とかじゃ "想定された使い方" しかできん罠
なんかインジェクションしたいってなったらもう自分で組むっきゃないわけで

そんなときにクラスじゃ粒度がデカすぎるって場合も多いんだよね
はばからずに高階のノリでイケるってホント楽(柔軟)でいい

419 名前:デフォルトの名無しさん mailto:sage [2009/02/03(火) 00:09:39 ]
>>413
> 職業プログラマの世界では、そもそも「車輪の再生産」は悪とされている
むしろどんどん再生産して儲けてくださいそれが職業プログラマの本分です



420 名前:デフォルトの名無しさん mailto:sage [2009/02/03(火) 01:16:29 ]
再生産で儲けるのは三流
俺 一流だから そんなこと しない

421 名前:デフォルトの名無しさん mailto:sage [2009/02/03(火) 03:02:26 ]
>>420
「再生産」で儲けることのなにが三流なのか、答えてもらおうじゃないかw

422 名前:デフォルトの名無しさん mailto:sage [2009/02/03(火) 12:02:30 ]
儲けて旨い飯が食えりゃどっちでもいいじゃないか。

423 名前:デフォルトの名無しさん mailto:sage [2009/02/03(火) 12:13:33 ]
一流は金に困ってなんかいないから、儲けることなんか二の次に考えて新しいことを追い続けられる。

424 名前:デフォルトの名無しさん mailto:sage [2009/02/03(火) 12:34:51 ]
何で一流の奴がこんなとこで一流だの三流だのしょうもない議論やってんだよw
俺にできないような、新しい事を追い続けてくれよww

続きはマ板で

425 名前:デフォルトの名無しさん mailto:sage [2009/02/03(火) 21:09:42 ]
>>419は皮肉

×車輪の再生産
○車輪の再発明

426 名前:デフォルトの名無しさん mailto:sage [2009/02/07(土) 11:05:47 ]
糞スレ

427 名前:デフォルトの名無しさん mailto:sage [2009/02/07(土) 23:47:23 ]
関数を表す型を定義して、定数関数を定義しようとしたのですが
型からは関数とわかっていても、関数のようには呼び出せませんでした。

以下のようなことを実現するのは難しいのでしょうか?

type FUNC<'arg1,'result> = F of ('arg1 -> 'result);;
F ((+)1);; //使用例1
F (+);; //使用例2
//ここでエラー
let apply1 (f:FUNC<int,int>) = f 1;;

//apply1 ((+)1)、などとしたい

欲を言えば、FUNC型からarg1やresultの型を取り出すような
プログラムも書きたい・・


428 名前:デフォルトの名無しさん mailto:sage [2009/02/08(日) 00:47:21 ]
型と関数を混同してるような
というか、なんかいろいろ勘違いしてそうに見える

> apply1 ((+)1)、などとしたい
で、一体なにをしたいの?その式を評価して得るものはなに?
まずはその式の「型」を教えてくれないとなんともアドバイスできない

いちおーエスパーしとくとこんなんか?

let apply1 f x = f x
let f = apply1 ((+) 1)
f 2 // val it : int = 3

もしなにか Union Types を使わにゃならんような
理由があるんだったなら教えてほしい

429 名前:デフォルトの名無しさん mailto:sage [2009/02/08(日) 02:00:06 ]
ご回答ありがとうございます。
おっしゃるとおり、自分でもたぶん型と関数の違いがあまりわかってないと思います^^;

上の質問をした経緯です
最終的にやりたいことは、let recを用いずにYコンビネータを書きたい
しかし、F#では、次のような呼び出しは型情報が∞ループして決定できない
 let fact self n = if n=1 then 1 else n * ((self self) (n-1)) in fact fact 10;;
そこで、まずは、再帰的なデータ型を定義して用い、上記のような呼び出しを通るようにしたい
(再帰的に'aを'a->'bに置き換えるような型)

しかし、再帰的なデータ型とか、あまりプログラミング経験がないので
型情報を扱うプログラムからまず取り組むことにしたが、つまづいた、とう状況です

上のプログラムですが、次のようにするとコンパイルは通ります。
let apply1 f:FUNC<int,int> = f 1;;
val apply1 : (int -> FUNC<int,int>) -> FUNC<int,int>
しかし、自分が求めた型は
val apply1 : FUNC<int,int> -> int
なのですが、なぜこうなるのかはさっぱりわかってません




430 名前:デフォルトの名無しさん mailto:sage [2009/02/08(日) 08:51:24 ]
MLでYコンビネータを書く話なら、↓の最後にコードが載ってる
私には内容がさっぱり理解できないので、参考になるかどうかは分からんが

ttp://www.kurims.kyoto-u.ac.jp/~hassei/selfref2006.pdf

431 名前:デフォルトの名無しさん mailto:sage [2009/02/08(日) 09:55:54 ]
>>427 は、↓にすればコンパイルが通るぞ

let apply1 = function (F f) -> f 1;;






[ 続きを読む ] / [ 携帯版 ]

前100 次100 最新50 [ このスレをブックマーク! 携帯に送る ] 2chのread.cgiへ
[+板 最近立ったスレ&熱いスレ一覧 : +板 最近立ったスレ/記者別一覧]( ´∀`)<121KB

read.cgi ver5.27 [feat.BBS2 +1.6] / e.0.2 (02/09/03) / eucaly.net products.
担当:undef