F#とは?初心者プログラマのための解説

このQ&Aのポイント
  • F#はMicrosoftが開発したプログラミング言語で、C#と相性が良く、並列処理やメニーコアでのプログラミングに向いています。
  • F#は関数型言語であり、CやC++とは異なる特徴を持っています。関数の組み合わせによる処理やイミュータブルなデータ構造の使用などがあります。
  • F#は.NET Frameworkの一部として提供されており、GUIアプリケーションなどの開発にも利用することができます。
回答を見る
  • ベストアンサー

F#って何??

F#って何?? 最初はC言語から初めて,その次にC++を触りだして,GUIが必要になったのでC#で触り始めて 「.NetFrameworkってなんだか凄いんじゃね?」と思い始めたくらいの初心者プログラマからの質問です. VS2010から使えるようになったF#って一体どんな言語ですか? 調べてると,「C#の処理の一部を任せるのに向いている」だとか,「メニーコアでのプログラミングに向いている」だとか,色々言われているみたいなんですが, いったい,何が出来て,何をするのに向いている言語なのでしょうか?? どなたか易しめに教えていただけないでしょうか? あと,関数型言語とCとかの言語の違いについても簡単に説明していただけると嬉しいです.

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

  • ベストアンサー
回答No.4

Cross999さん向けの答え方をします。 .NetFramework、そしてその申し子言語であるC#は、プログラミング言語の中では結構後発なので、先輩言語、先輩基盤の成功や失敗を鑑みて設計されており、いろいろな部分で洗練されています。 F#は、C#よりさらに後発の.NetFramework上で動作する言語で、色々な指向を持たせた言語です。 C++のようなオブジェクト指向はもちろん、関数型言語の特徴も持っていて、文法定義もでき、非同期処理に強く、型もいちいち指定しなくても推測してくれるという、素晴らしい言語です。 コード量が少なく、簡潔で、しかもバグが出にくいです。 何ができて……という問いには、何でもできると答えておきます。ただ、.NetFramework主体の言語なので、C++のようなネイティブ処理ではなく、マネージコード(.NetFramework)前提で設計されていると思います。なので、範囲としては、C#と同じような範囲であって、ネイティブならば、C++や、C++/CLIとかがよいと思います。 何をするのに向いている……という問いならば、マルチ指向に設計されているのですから、用途は広いと思います。特に、非同期処理が得意なわけですから、Silverlight、WPF、WindowsForm などのGUIの処理にも向いています。 F# の F は、FunctionalのFで、他からの移植でなくて.NetFrameworkから生まれた言語の中では、初めて関数型言語の性質を持つという特徴を持っています。ただ、関数型だけではなくマルチ指向なので、ご注意ください。 さて、関数型言語について少しだけ書きます。これは、F#ではなく関数型についての特徴です。 CやC++が手続き型言語と言われて、手続きを示すのに対し、宣言型言語とも言われます。 つまり、手続き型言語のように「あれしてからこれをしてそれを返す」といった感じではなく、「○○という処理は、こういうものを返す」という約束を書くようなものです。 SQLは関数型ではありませんが、宣言型言語ではあります。あれしてこれしてという処理ではなくて、Select文やUpdate文で、「これこれこういうものをこうする」と一文で書きますね。 関数型言語は、なるべく状態を持たせない、なるべく変数を使わないものです。手続き型から移行するためには、一度頭を切り替えないとダメなので、一言ではなかなか説明は難しいため、関数型ではないSQLを引き合いに出してしまいましたが、そういう宣言が集まって定義されているものです。 関数を引数として受け取ったり、戻り値が関数だったりするのは、関数型では普通です。逆に、CやC++の戻り値voidに当たる処理はありません。すべての関数は、何らかの戻り値を必ず返します。 そして、数学のように=で結ばれた右辺と左辺は等しいです。Cのように、a = a + 1 みたいなのは、関数型にはありません。F#でいえば、aはあらかじめ変化できる特別なもの(変数)と定義しておいて(通常は一度決めたら変化させないので)、a <- a + 1 と書きます。イコールではないですね。 CodeZineには、いくつか割と解りやすい入門記事が載っています。参考URLに載せておきます。 また、MSDN Magazineにも解りやすい記事があるので、以下に載せておきます。 http://msdn.microsoft.com/ja-jp/magazine/ff714588.aspx

参考URL:
http://codezine.jp/article/detail/4254
Cross999
質問者

お礼

Ogachaさん,回答ありがとうございます. 私はプログラムが強い人間では無いので,Ogachaさんが易しめに書いてくれたので助かりました. >何ができて……という問いには、何でもできると答えておきます。 「何ができるのか?」という質問は愚問でした. たしかに,プログラミングって,やろうと思えば,何でもできますよね,書き方が違うだけで. >何をするのに向いている……という問いならば・・・ 最近は,C#4.0で導入されたTPL等の勉強をしていますので,非同期処理は,大変興味があります. >さて、関数型言語について少しだけ・・・・ な,なんとなくは,分かりました. 結局は,自分で触ってみないと分からないものですが,触ってみる気になりました. ありがとうございました.

その他の回答 (3)

  • salsberry
  • ベストアンサー率69% (495/711)
回答No.3

使ったことがないので、「F#って一体どんな言語ですか?」という問いには申し訳ありませんが正面から答えることができません。 しかし、ANo.1の人は何か他のものと勘違いしていないでしょうか。 ・F#はFortranには全く似ていません。言語系統的にはML→Caml→OCamlの流れをくんでいます。 ・関数型言語というのは、コンピュータ科学的にはλ計算の概念を基礎とし、関数をファーストクラスのオブジェクトとして扱える言語というのが広い意味での定義です。値を返さないプロシージャ(手続き)に対して値を返すものを関数と呼んだのとは意味合いが異なります。 C言語プログラマーには馴染みのない型推論とか遅延評価とかの興味深い機能がありますが、それらが実用上どれくらい役に立つかは何とも言えません。

Cross999
質問者

お礼

回答ありがとうございます. >C言語プログラマーには馴染みのない型推論とか遅延評価とかの興味深い機能がありますが、 >それらが実用上どれくらい役に立つかは何とも言えません。 そうですよね.触ってみるまで,本当に自分の役に立つのかは分かりませんよね. とりあえず,興味は持てたので,触ってみようと思います.

  • kabaokaba
  • ベストアンサー率51% (724/1416)
回答No.2

いやいやいや・・・関数型言語が「昔話」なんてのは・・・・ F#ってのはMSが最近出した「関数型言語」であって なんで「昔話」の種類の言語が出てくるのでしょうかね. それとFortranがF#のもとだというソースがどこなのかも知りたいです. F#はOCamelがベースになっているってのはMSのサイトにもあるんですが. 実際の関数型言語は実はぜんぜん過去のものではないわけで LispやHaskellも盛んだし, 関数型言語をいじると「再帰」が身につくほか かなりスマートなコードが書けるようになります. F#に限らず,関数型言語の特徴は なんといっても「副作用」の取り扱いと 「関数そのものをデータとして扱う」という考え方で 関数に関数を与えちゃうんです. 「副作用」の代表格は「IO」ですけど,面倒なので割愛. ほかにも F#は「型推論」とか「静的で強い型付け」なんていう特徴もあるようで 正統的な関数型言語みたいですね. #ほかにも「代入が存在しない」なんていう特徴もあることもがある 関数を値として扱うなんてのは,Cなんかだと「関数ポインタ」, Perlなんかだと「無名関数」なんてので実現するけど 関数型言語は関数そのものをそのまま代入できるわけ たとえば f(x)=x+1と定義して map(f, [1,2,3,4]) なんてすると [2,3,4,5]というリストが戻ってくるなんてことができる 第一引数が「関数」にできたりする. foldというタイプの関数が定義しやすいのも特徴かな どうしてこういう言語を考えるのかという問題は 「副作用」の影響が大きいのかな 関数型言語ってのは 「同じものを与えれば同じものがもどってくる」 (大雑把に言えば「副作用がない」ってこと) ってのがベースにあって,こういう風になっていると 違う環境で計算しても同じものが戻ってくるわけで そうであれば「後で合体させる」ときに便利なのは分かるでしょう? あとは関数を連結しやすいのです.いわゆるパイプです.

Cross999
質問者

お礼

回答ありがとうございます. 分からない言葉もありましたが,非常に参考になりました.(特に,「たとえば」以降) ありがとうございました!!

  • anmochi
  • ベストアンサー率65% (1332/2045)
回答No.1

 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#が流行りそうか、と言われたら・・・・ボクには何とも言えない。

Cross999
質問者

お礼

anmochiさん 大変丁寧な説明ありがとうございました. >ただ、F#が流行りそうか、と言われたら・・・・ボクには何とも言えない。 J#なる言語もありますよね..... さすがに,せっかく,勉強しても流行らなかったら残念ですよね. ただ >1960~1970年代に科学技術計算に多用されたFortranなる言語に似せて作られたプログラミング言語 ということは,やっぱり,速かったりするんでしょうか? それなら,.NetFrameworkってことも活かして,プログラム全体の統括をC#で,単純な重い処理をF#で,というのうはありなのでしょうか? 色々とご丁寧に回答していただきありがとうございます.

関連するQ&A

  • 異なるプログラミング言語を連携する手段はある?

    異なるプログラミング言語を連携する手段はあるでしょうか? 例えば、JavaでGUIの処理を書いておいて、計算をC言語で書いておく。まず、C言語で処理させてその結果をJavaが受け取りJavaのGUIで表示する。のような。 よろしくお願いします。

  • Windowsプログラミング 窓の分割について

    Windowsプログラミング初心者です。現在C言語によるGUIプログラミングを 作っているのですが、ウィンドウを分割して、その分割された各々のウィンドウ領域(例えば3つに分割すると)1つ目の領域にはログ1、2つ目の領域にはログ2、3つ目の領域にはログ3とか出せるように、窓を分割したいのですが、それに関する関数などをご教授していただけないでしょうか。 宜しくお願いいたします。

  • 新しく勉強したいのですが・・・

    将来、プログラマー・SEなどを目指したいのでC言語を勉強しようと思うのですが、プログラミング初心者でも分りやすい、C言語勉強用の本、よい勉強の方法などあったら教えてください。 よろしくお願いします。

  • \fはどのように使うのでしょうか。

    言語 :c 処理系:Borland C++ Compiler 5.5 OS  :Windows XP Home c言語でエスケープシーケンスの\fを試しても 上手く機能してくれません。 使い方が間違っているのかも分かりません。 \fは書式送りで、これがあるところで改ページが起こる 事を期待していたのですが、何も起こりません。 \fはどのように使うのでしょうか。

  • Windowsのプログラマって

    現在、情報系の大学生です。 講義で教えてもらうのは基本的にC言語のみです。 ここで皆さんに聞きたいのですが、どこかで「Windows(のGUI)プログラマはコンソールプログラミングより難しく、一般ソフトでは必要な人材だから他のプログラマ(いわゆるコンソールアプリ)より待遇がいい」という話をどこかで耳にしたことがあります。 これって本当なのでしょうか。 プログラマの方、教えていただけると助かります。

  • C# を始めたいのです. お知恵を拝借させてください

    お手数ですが、お知恵を拝借させてください. お願いします. 最近、C#を始めようと考えました.  参考書として まず、次の書籍を手に入れました. 全部、Microsoft の公式解説書です.   C#によるプログラミング Windows 上 C#によるプログラミング Windows 下 C# 標準リファレンス   Visual C#.NET ランゲージ リファレンス   プログラミング C# ところが、最初からよくわからぬ事ばかりです. どの本を見てみても、私がまず知りたい入出力関数の使い方が 見当たりませんです. 昔のC言語のころは、printf と、%6.2f のようなフォーマットでした. WriteLine となることはわかりましたが、フォーマットの詳細が まったく記述されていません. ファイルのオープンの手続きも同様です.どこにも見当たりません. C言語のころ、これらは命令ではなく、ライブラリ関数だと聞きました. それなら、どこを、何を見れば、この関数が見つけられるでしょう? 全く、困っています. よろしくお願いします.

  • CとC++をスクールで習おうと思うのですが。

    CとC++をスクールで習おうと思うのですが。 私は現在勤め先でデザイナーをしておりまして、アプリを作るのでプログラマーと一緒に仕事をしています。 しかし最近、デザイナーもプログラミングの習得が必要だと感じてきました。 といってもプログラミングが全く未経験なわけではありません。 初級ですが、以下の言語を使って簡単なツールを作った経験があります。 c、c#、javascript、vba(excel)、php、html、perl、独自言語、など ・excel上で外部ファイルを読み込んで様々な解析を行なうツール(vba) ・Web上で外部データや他のサイトからデータを収集して解析し、それをWebで結果を表示(php、js、perl、html) ・windows上で動く特殊な計算機(c#) ・CGツール(コンピュータグラフィック)上で動作する独自言語 こういう経験があるのですが、function関数を作ってファイルを読み書きして超初歩的なGUIを作れる程度のことしかできないんです。 私に足りないのは、「クラスって何?」「ポインタって?」「メモリ管理なんてしかことない」「リソースってどういうこと?」。 これらが仕事上で使わないので全然使い方がわからないのです。 しかしプログラマーと会議するときにこういう話が出てきて、理解できていないのでなんとかしなくてはなりません。 あと、VisualStudioを使ってみたことはあるのですが、いろいろなファイルが最初からあってこれらの意味もわかりません。 私は多少使ったことがある言語は習ったわけではなく本で勉強しながら覚えたので、プログラミングの基本が全くわかっていないようなのです。 こういうときにスクールに通うのは有効でしょうか? 都内なのでKen Schoolとかいいのかなあと思っているのですがどうでしょうか?

  • C言語について。

    C言語プログラマとしては、スタートアップコードは・・・ ・自分が書いたプログラムを、直接動かすために必要なライブラリ ・それはコンパイル後、リンカによって追加されるライブラリこれは、 どういう意味でしょうか?分かりやすく教えていただけると幸いです。すみません。で、 以下のかぶくんまんさんの回答です。 https://detail.chiebukuro.yahoo.co.jp/qa/question_detail/q11247611941 で、 C言語におけるプログラミングとは「main関数を書くこと」に他ならない。なぜ「main関数を書く」ことがC言語におけるプログラミングに他ならないのかと言えば、それは偏に「C言語のコンパイラはmain関数を呼び出すプログラムを生成するから」です。それがmain関数を求めるので結果的にmain関数がリンクされ、そしてmain関数が求めるままに他の関数もリンクされていくわけです。 で、その「main関数を呼び出すプログラム」こそが、C言語における「スタートアップコード」。 という回答で、main関数以降は、プログラマが書くのですよね?プログラマが関数をリンクさせる様なプログラムを書くということでしょうか?教えていただけると幸いです。すみません。 という所が分かりません。教えていただけると幸いです。すみません。以下のURL https://detail.chiebukuro.yahoo.co.jp/qa/question_detail/q12247932542

  • 言語としてCを選択する理由

    VB.NETをちょっとかじった初心者です。 よく「プロのプログラマーになるにはC言語を学ぶべき」と聞くのですが、なぜプログラマを仕事とするのにC言語を習得するのがいいのかわかりません。 また、「最初の言語はCがいい」もよく聞くのですが、なぜかわかりません。 どなたかC言語を習得する意義を教えてください。

  • プログラミングについて。

    プログラミング初心者です。 ちょっと興味があり、プログラミングの勉強をしています。 テキストベースでプログラムを書いていったとして、どうやってGUIベースにすればいいのでしょうか? Linux上で簡単なプログラムをつくってコンパイルしましたが、コマンドから実行するともちろんCUIでの実行になります。 どうすれば、GUIベースで作れるのでしょうか。 言語以外の知識(専用ソフトウェア等)を必要とするのですか。 それとも、htmlのように画像などを読み込ませ完成させるのでしょうか。 iPhoneアプリ製作などは XCodeなどがありますが、プログラマーとして仕事をしている人は基本的にそのような専用ソフト上でプログラミングしているのでしょうか。

専門家に質問してみよう