SlideShare una empresa de Scribd logo
1 de 25
関数型言語初心者が
F#触ってみた
   @245X
F#とは
 関数型言語(純粋ではない)

 .NET   Frameworkとの互換性が高い
 Ocamlの機能を多く受け継いでいる
F#を使うメリット
 .NET   Frameworkで使える
 Visual   Studioで開発できる
 美しいコードが書ける
F# Interactive
  F#を実行できるインタプリタ

  Visual   Studio 2010以降についてる
  Alt+Enterで範囲指定したF#のコードをインタ
  プリタに渡せて便利
変数
 letで宣言できる。

 基本的に値は変更できない。

 代入することを「束縛」という。

> let a = 1;;
val a : int = 1

> a <- 2;; // <- は代入の演算子
 a <- 2;;
 ^^^^^^
stdin(7,1): error FS0027: この値は変更可能ではありません
値が変更できないメリット
 状態に依存しなくなる。

  →バグを抑えることができる。
 いつでも必ず同じ結果が返ってくる。

  →再利用しやすい。
 アルゴリズムが明確になる。

  →リーダブルコード!
純粋な関数
 funをつけることで関数を宣言。
 ラムダ計算においては、関数の引数は常に1つ

     関数定義:fun x -> x + 1 ;;
     関数適用:x 1;;
> let myFun = fun x -> x * x;;

val myFun : x:int -> int

> myFun 3;;
val it : int = 9
2つ以上の引数を渡すには?
 関数の引数に関数を渡せばよい


> let f = (fun x -> (fun y -> x + y));;

val f : x:int -> y:int -> int

> f 10;;
val it : (int -> int) = <fun:it@2>
> f 10 20;;
val it : int = 30
省略形

let f = (fun x -> (fun y -> (fun z -> x + y + z)));;

let f = fun x y z -> x + y + z;;

let f x y z = x + y + z;;



          どれも同じ関数である。
パターンマッチ
   お馴染みのFizzBuzz
   if文で書いてみると以下のようになる。

let FizzBuzz1 num =
      if num % 3 = 0
          && num % 5 = 0 then "FizzBuzz"
      elif num % 3 = 0 then "Fizz"
      elif num % 5 = 0 then "Buzz"
      else string num
これをパターンマッチで書くと…?

let FizzBuzz2 num =
      match num with
      | x when x%3 = 0 && x%5 = 0 -> "FizzBuzz"
      | x when x%3 = 0           -> "Fizz"
      | x when x%5 = 0           -> "Buzz"
      |_                        -> string num

// アンダーバー(_)はワイルドカード

   スッキリした形で記述できる。
タプルを使うと更にスッキリする

let FizzBuzz3 num =
   match (num%3, num%5) with
   |(0, 0) -> "FizzBuzz"
   |(0, _) -> "Fizz"
   |(_, 0) -> "Buzz"
   |_      -> string x
パターンマッチの魅力
   すべてのパターンに到達可能かどうか、またすべての
    パターンを網羅しているかを事前に警告してくれる。
> let FizzBuzz3 x =
      match (x%3, x%5) with
      |(0, 0) -> "FizzBuzz"
      |(0, _) -> "Fizz"
      |(_, 0) -> “Buzz“

FizzBuzz.fs(18,16): warning FS0025: この式のパターン マッチが不
完全です たとえば、値 '(1,1)' はパターンに含まれないケースを示
す可能性があります。

val fb : x:int -> string
関数型言語は
奥が深い・・・
ところで
F#はWindowsPhone
 開発もサポートして
    いるとか
手順
   Visual Studio 2010 Professionalをインストール
      →プロジェクトのテンプレートが2010のみ対応のため
   Visual Studio 2010 Service Pack 1 をインストール
     http://www.microsoft.com/ja-jp/download/details.aspx?id=23691
   Microsoft Silverlight 4 Tools for Visual Studio 2010 をインストール
     http://www.microsoft.com/ja-jp/download/details.aspx?id=18149
   Windows Phone SDK 7.1 と SDK7.1.1更新プログラムをインストール
     http://www.microsoft.com/ja-jp/download/details.aspx?id=27570
      http://www.microsoft.com/ja-jp/download/details.aspx?id=29233
   開発テンプレート F# and C# Win Phone App (Silverlight) をインストール
      http://visualstudiogallery.msdn.microsoft.com/17454c58-c1d9-4640-afe1-7943db13891e/
手順
    ファイル→新規作成→プロジェクト
    Visual F#→WP7→F# and C# Windows Phone Application
     (Silverlight)を選択
    作成して実行してみる
ここで問題発生
   以下のようなエラーが出る
   F# runtime for Silverlight version v4.0 is not installed.
   Please go to http://go.microsoft.com/fwlink/?LinkId=177463
    to download and install matching F# runtime
   F# for Silverlight Runtime がインストールされていない
   Microsoft Silverlight 4 Tools for Visual Studio 2010    に含ま
    れてるはずなのに・・・
仕方ないので

   Microsoft Silverlight 4 Tools for Visual Studio 2010 の
    実行ファイルからF# for Silverlight Runtime のインス
    トーラを取り出して実行
   Explzhを使って取り出した
           http://www.ponsoftware.com/
   FSharpRuntimeSL4.msi を実行
実行できた
構成

   AppとAppHostに分かれる
   App.xaml、App.xaml.csは通
    常と同じ
   MainPage.xamlにビュー
   AppLogic.fsにロジック
書きやすい?

   正直まだ分からん
   複雑なロジックを簡潔に記述できるかもしれない
   F#のサポートが弱いのがつらい
   → テンプレートがVS2010のみ対応だし、ストアア
    プリはできなさそう
   ライブラリ作って呼び出すのは可能なはず
そのうちHaskellも
  勉強します

Más contenido relacionado

Destacado

Erlangを触ってみた
Erlangを触ってみたErlangを触ってみた
Erlangを触ってみたYoichi Toyota
 
GHC 6.12.1 マルチコア対応ランタイムシステムについて
GHC 6.12.1 マルチコア対応ランタイムシステムについてGHC 6.12.1 マルチコア対応ランタイムシステムについて
GHC 6.12.1 マルチコア対応ランタイムシステムについてMitsutoshi Aoe
 
関数型軽い紹介
関数型軽い紹介関数型軽い紹介
関数型軽い紹介Daniel Perez
 
第一回関数型言語勉強会 大阪
第一回関数型言語勉強会 大阪第一回関数型言語勉強会 大阪
第一回関数型言語勉強会 大阪Naoki Kitora
 
F#で学ぶ関数プログラミング入門?
F#で学ぶ関数プログラミング入門?F#で学ぶ関数プログラミング入門?
F#で学ぶ関数プログラミング入門?pocketberserker
 
FP習熟度レベルとFSharpxのIteratee
FP習熟度レベルとFSharpxのIterateeFP習熟度レベルとFSharpxのIteratee
FP習熟度レベルとFSharpxのIterateepocketberserker
 
Pythonista による Pythonista のための Scala 紹介 in BPStudy #49
Pythonista による Pythonista のための Scala 紹介 in BPStudy #49Pythonista による Pythonista のための Scala 紹介 in BPStudy #49
Pythonista による Pythonista のための Scala 紹介 in BPStudy #49shoma h
 
Katagaitai CTF勉強会 #4 Crypto
Katagaitai CTF勉強会 #4 CryptoKatagaitai CTF勉強会 #4 Crypto
Katagaitai CTF勉強会 #4 Cryptotrmr
 
これから Haskell を書くにあたって
これから Haskell を書くにあたってこれから Haskell を書くにあたって
これから Haskell を書くにあたってTsuyoshi Matsudate
 
120901fp key
120901fp key120901fp key
120901fp keyksknac
 
純粋関数型アルゴリズム入門
純粋関数型アルゴリズム入門純粋関数型アルゴリズム入門
純粋関数型アルゴリズム入門Kimikazu Kato
 
Moq & Fakes Framework を使った実践的ユニットテスト - BuildInsider
Moq & Fakes Framework を使った実践的ユニットテスト - BuildInsiderMoq & Fakes Framework を使った実践的ユニットテスト - BuildInsider
Moq & Fakes Framework を使った実践的ユニットテスト - BuildInsider貴志 上坂
 
関数型言語とオブジェクト指向言語(序章)
関数型言語とオブジェクト指向言語(序章)関数型言語とオブジェクト指向言語(序章)
関数型言語とオブジェクト指向言語(序章)tadaaki hayashi
 
データベース入門3
データベース入門3データベース入門3
データベース入門3tadaaki hayashi
 
関数プログラミング入門
関数プログラミング入門関数プログラミング入門
関数プログラミング入門Hideyuki Tanaka
 
continuatioN Linking
continuatioN LinkingcontinuatioN Linking
continuatioN LinkingKouji Matsui
 
F#の基礎(?)
F#の基礎(?)F#の基礎(?)
F#の基礎(?)bleis tift
 
磯野ー!関数型言語やろうぜー!
磯野ー!関数型言語やろうぜー!磯野ー!関数型言語やろうぜー!
磯野ー!関数型言語やろうぜー!Ra Zon
 

Destacado (20)

Erlangを触ってみた
Erlangを触ってみたErlangを触ってみた
Erlangを触ってみた
 
GHC 6.12.1 マルチコア対応ランタイムシステムについて
GHC 6.12.1 マルチコア対応ランタイムシステムについてGHC 6.12.1 マルチコア対応ランタイムシステムについて
GHC 6.12.1 マルチコア対応ランタイムシステムについて
 
関数型軽い紹介
関数型軽い紹介関数型軽い紹介
関数型軽い紹介
 
Yesod(at FPM2012)
Yesod(at FPM2012)Yesod(at FPM2012)
Yesod(at FPM2012)
 
第一回関数型言語勉強会 大阪
第一回関数型言語勉強会 大阪第一回関数型言語勉強会 大阪
第一回関数型言語勉強会 大阪
 
F#で学ぶ関数プログラミング入門?
F#で学ぶ関数プログラミング入門?F#で学ぶ関数プログラミング入門?
F#で学ぶ関数プログラミング入門?
 
FP習熟度レベルとFSharpxのIteratee
FP習熟度レベルとFSharpxのIterateeFP習熟度レベルとFSharpxのIteratee
FP習熟度レベルとFSharpxのIteratee
 
Pythonista による Pythonista のための Scala 紹介 in BPStudy #49
Pythonista による Pythonista のための Scala 紹介 in BPStudy #49Pythonista による Pythonista のための Scala 紹介 in BPStudy #49
Pythonista による Pythonista のための Scala 紹介 in BPStudy #49
 
Katagaitai CTF勉強会 #4 Crypto
Katagaitai CTF勉強会 #4 CryptoKatagaitai CTF勉強会 #4 Crypto
Katagaitai CTF勉強会 #4 Crypto
 
JSer Class #1
JSer Class #1JSer Class #1
JSer Class #1
 
これから Haskell を書くにあたって
これから Haskell を書くにあたってこれから Haskell を書くにあたって
これから Haskell を書くにあたって
 
120901fp key
120901fp key120901fp key
120901fp key
 
純粋関数型アルゴリズム入門
純粋関数型アルゴリズム入門純粋関数型アルゴリズム入門
純粋関数型アルゴリズム入門
 
Moq & Fakes Framework を使った実践的ユニットテスト - BuildInsider
Moq & Fakes Framework を使った実践的ユニットテスト - BuildInsiderMoq & Fakes Framework を使った実践的ユニットテスト - BuildInsider
Moq & Fakes Framework を使った実践的ユニットテスト - BuildInsider
 
関数型言語とオブジェクト指向言語(序章)
関数型言語とオブジェクト指向言語(序章)関数型言語とオブジェクト指向言語(序章)
関数型言語とオブジェクト指向言語(序章)
 
データベース入門3
データベース入門3データベース入門3
データベース入門3
 
関数プログラミング入門
関数プログラミング入門関数プログラミング入門
関数プログラミング入門
 
continuatioN Linking
continuatioN LinkingcontinuatioN Linking
continuatioN Linking
 
F#の基礎(?)
F#の基礎(?)F#の基礎(?)
F#の基礎(?)
 
磯野ー!関数型言語やろうぜー!
磯野ー!関数型言語やろうぜー!磯野ー!関数型言語やろうぜー!
磯野ー!関数型言語やろうぜー!
 

Similar a 関数型言語初心者の俺がF#触ってみた

Ansible troubleshooting 101_2021
Ansible troubleshooting 101_2021Ansible troubleshooting 101_2021
Ansible troubleshooting 101_2021Hideki Saito
 
Swift を振り返ってみよう #cswift
Swift を振り返ってみよう #cswiftSwift を振り返ってみよう #cswift
Swift を振り返ってみよう #cswiftTomohiro Kumagai
 
Swift 2.0 で変わったところ「後編」 #cswift
Swift 2.0 で変わったところ「後編」 #cswiftSwift 2.0 で変わったところ「後編」 #cswift
Swift 2.0 で変わったところ「後編」 #cswiftTomohiro Kumagai
 
DelphiでWin/Macクロスコンパイル
DelphiでWin/MacクロスコンパイルDelphiでWin/Macクロスコンパイル
DelphiでWin/MacクロスコンパイルTomonori Ohba
 
Behat+Symfony2ではじめるBDD超入門
Behat+Symfony2ではじめるBDD超入門Behat+Symfony2ではじめるBDD超入門
Behat+Symfony2ではじめるBDD超入門晃 遠山
 
TypeScript と Visual Studio Code
TypeScript と Visual Studio CodeTypeScript と Visual Studio Code
TypeScript と Visual Studio CodeAkira Inoue
 
BNN CAMP vol.3  インタラクションデザインの現在―プログラミング初心者のためのopenFrameworks入門 1
BNN CAMP vol.3  インタラクションデザインの現在―プログラミング初心者のためのopenFrameworks入門 1BNN CAMP vol.3  インタラクションデザインの現在―プログラミング初心者のためのopenFrameworks入門 1
BNN CAMP vol.3  インタラクションデザインの現在―プログラミング初心者のためのopenFrameworks入門 1Atsushi Tadokoro
 
NSNotification in Swift #cocoa_kansai
NSNotification in Swift #cocoa_kansaiNSNotification in Swift #cocoa_kansai
NSNotification in Swift #cocoa_kansaiTomohiro Kumagai
 
Build 番号の自動更新スクリプトについて #cocoa_kansai
Build 番号の自動更新スクリプトについて #cocoa_kansaiBuild 番号の自動更新スクリプトについて #cocoa_kansai
Build 番号の自動更新スクリプトについて #cocoa_kansaiTomohiro Kumagai
 
13016 n分で作るtype scriptでnodejs
13016 n分で作るtype scriptでnodejs13016 n分で作るtype scriptでnodejs
13016 n分で作るtype scriptでnodejsTakayoshi Tanaka
 
今から始める、Windows 10&新.NETへの移行戦略
今から始める、Windows 10&新.NETへの移行戦略今から始める、Windows 10&新.NETへの移行戦略
今から始める、Windows 10&新.NETへの移行戦略信之 岩永
 
今から始める、Windows 10&新.NETへの移行戦略
今から始める、Windows 10&新.NETへの移行戦略今から始める、Windows 10&新.NETへの移行戦略
今から始める、Windows 10&新.NETへの移行戦略信之 岩永
 
Xamarin.iOS/android+F#で作る関数型アプリ
Xamarin.iOS/android+F#で作る関数型アプリXamarin.iOS/android+F#で作る関数型アプリ
Xamarin.iOS/android+F#で作る関数型アプリMasuda Tomoaki
 
【C++BUILDER STARTER チュートリアルシリーズ】シーズン2 C++Builderの部 第4回 ‟関数„
【C++BUILDER STARTER チュートリアルシリーズ】シーズン2 C++Builderの部 第4回 ‟関数„【C++BUILDER STARTER チュートリアルシリーズ】シーズン2 C++Builderの部 第4回 ‟関数„
【C++BUILDER STARTER チュートリアルシリーズ】シーズン2 C++Builderの部 第4回 ‟関数„和弘 井之上
 
明示的アニメで、Flutterアニメーション入門
明示的アニメで、Flutterアニメーション入門明示的アニメで、Flutterアニメーション入門
明示的アニメで、Flutterアニメーション入門cch-robo
 
F#によるFunctional Programming入門
F#によるFunctional Programming入門F#によるFunctional Programming入門
F#によるFunctional Programming入門bleis tift
 
CodeIgniter東京勉強会 2011.05.14
CodeIgniter東京勉強会 2011.05.14CodeIgniter東京勉強会 2011.05.14
CodeIgniter東京勉強会 2011.05.14Takako Miyagawa
 
どこでも動くゲームを作るためのベタープラクティス
どこでも動くゲームを作るためのベタープラクティスどこでも動くゲームを作るためのベタープラクティス
どこでも動くゲームを作るためのベタープラクティス5mingame2
 

Similar a 関数型言語初心者の俺がF#触ってみた (20)

Pronama 0707 wf4
Pronama 0707 wf4Pronama 0707 wf4
Pronama 0707 wf4
 
Ansible troubleshooting 101_2021
Ansible troubleshooting 101_2021Ansible troubleshooting 101_2021
Ansible troubleshooting 101_2021
 
Swift を振り返ってみよう #cswift
Swift を振り返ってみよう #cswiftSwift を振り返ってみよう #cswift
Swift を振り返ってみよう #cswift
 
Swift 2.0 で変わったところ「後編」 #cswift
Swift 2.0 で変わったところ「後編」 #cswiftSwift 2.0 で変わったところ「後編」 #cswift
Swift 2.0 で変わったところ「後編」 #cswift
 
DelphiでWin/Macクロスコンパイル
DelphiでWin/MacクロスコンパイルDelphiでWin/Macクロスコンパイル
DelphiでWin/Macクロスコンパイル
 
Behat+Symfony2ではじめるBDD超入門
Behat+Symfony2ではじめるBDD超入門Behat+Symfony2ではじめるBDD超入門
Behat+Symfony2ではじめるBDD超入門
 
TypeScript と Visual Studio Code
TypeScript と Visual Studio CodeTypeScript と Visual Studio Code
TypeScript と Visual Studio Code
 
BNN CAMP vol.3  インタラクションデザインの現在―プログラミング初心者のためのopenFrameworks入門 1
BNN CAMP vol.3  インタラクションデザインの現在―プログラミング初心者のためのopenFrameworks入門 1BNN CAMP vol.3  インタラクションデザインの現在―プログラミング初心者のためのopenFrameworks入門 1
BNN CAMP vol.3  インタラクションデザインの現在―プログラミング初心者のためのopenFrameworks入門 1
 
NSNotification in Swift #cocoa_kansai
NSNotification in Swift #cocoa_kansaiNSNotification in Swift #cocoa_kansai
NSNotification in Swift #cocoa_kansai
 
Build 番号の自動更新スクリプトについて #cocoa_kansai
Build 番号の自動更新スクリプトについて #cocoa_kansaiBuild 番号の自動更新スクリプトについて #cocoa_kansai
Build 番号の自動更新スクリプトについて #cocoa_kansai
 
13016 n分で作るtype scriptでnodejs
13016 n分で作るtype scriptでnodejs13016 n分で作るtype scriptでnodejs
13016 n分で作るtype scriptでnodejs
 
今から始める、Windows 10&新.NETへの移行戦略
今から始める、Windows 10&新.NETへの移行戦略今から始める、Windows 10&新.NETへの移行戦略
今から始める、Windows 10&新.NETへの移行戦略
 
今から始める、Windows 10&新.NETへの移行戦略
今から始める、Windows 10&新.NETへの移行戦略今から始める、Windows 10&新.NETへの移行戦略
今から始める、Windows 10&新.NETへの移行戦略
 
Xamarin.iOS/android+F#で作る関数型アプリ
Xamarin.iOS/android+F#で作る関数型アプリXamarin.iOS/android+F#で作る関数型アプリ
Xamarin.iOS/android+F#で作る関数型アプリ
 
【C++BUILDER STARTER チュートリアルシリーズ】シーズン2 C++Builderの部 第4回 ‟関数„
【C++BUILDER STARTER チュートリアルシリーズ】シーズン2 C++Builderの部 第4回 ‟関数„【C++BUILDER STARTER チュートリアルシリーズ】シーズン2 C++Builderの部 第4回 ‟関数„
【C++BUILDER STARTER チュートリアルシリーズ】シーズン2 C++Builderの部 第4回 ‟関数„
 
[Japan Tech summit 2017] APP 001
[Japan Tech summit 2017] APP 001[Japan Tech summit 2017] APP 001
[Japan Tech summit 2017] APP 001
 
明示的アニメで、Flutterアニメーション入門
明示的アニメで、Flutterアニメーション入門明示的アニメで、Flutterアニメーション入門
明示的アニメで、Flutterアニメーション入門
 
F#によるFunctional Programming入門
F#によるFunctional Programming入門F#によるFunctional Programming入門
F#によるFunctional Programming入門
 
CodeIgniter東京勉強会 2011.05.14
CodeIgniter東京勉強会 2011.05.14CodeIgniter東京勉強会 2011.05.14
CodeIgniter東京勉強会 2011.05.14
 
どこでも動くゲームを作るためのベタープラクティス
どこでも動くゲームを作るためのベタープラクティスどこでも動くゲームを作るためのベタープラクティス
どこでも動くゲームを作るためのベタープラクティス
 

関数型言語初心者の俺がF#触ってみた

  • 2. F#とは  関数型言語(純粋ではない)  .NET Frameworkとの互換性が高い  Ocamlの機能を多く受け継いでいる
  • 3. F#を使うメリット  .NET Frameworkで使える  Visual Studioで開発できる  美しいコードが書ける
  • 4. F# Interactive  F#を実行できるインタプリタ  Visual Studio 2010以降についてる  Alt+Enterで範囲指定したF#のコードをインタ プリタに渡せて便利
  • 5. 変数  letで宣言できる。  基本的に値は変更できない。  代入することを「束縛」という。 > let a = 1;; val a : int = 1 > a <- 2;; // <- は代入の演算子 a <- 2;; ^^^^^^ stdin(7,1): error FS0027: この値は変更可能ではありません
  • 6. 値が変更できないメリット  状態に依存しなくなる。 →バグを抑えることができる。  いつでも必ず同じ結果が返ってくる。 →再利用しやすい。  アルゴリズムが明確になる。 →リーダブルコード!
  • 7. 純粋な関数  funをつけることで関数を宣言。  ラムダ計算においては、関数の引数は常に1つ 関数定義:fun x -> x + 1 ;; 関数適用:x 1;; > let myFun = fun x -> x * x;; val myFun : x:int -> int > myFun 3;; val it : int = 9
  • 8. 2つ以上の引数を渡すには?  関数の引数に関数を渡せばよい > let f = (fun x -> (fun y -> x + y));; val f : x:int -> y:int -> int > f 10;; val it : (int -> int) = <fun:it@2> > f 10 20;; val it : int = 30
  • 9. 省略形 let f = (fun x -> (fun y -> (fun z -> x + y + z)));; let f = fun x y z -> x + y + z;; let f x y z = x + y + z;; どれも同じ関数である。
  • 10. パターンマッチ  お馴染みのFizzBuzz  if文で書いてみると以下のようになる。 let FizzBuzz1 num = if num % 3 = 0 && num % 5 = 0 then "FizzBuzz" elif num % 3 = 0 then "Fizz" elif num % 5 = 0 then "Buzz" else string num
  • 11. これをパターンマッチで書くと…? let FizzBuzz2 num = match num with | x when x%3 = 0 && x%5 = 0 -> "FizzBuzz" | x when x%3 = 0 -> "Fizz" | x when x%5 = 0 -> "Buzz" |_ -> string num // アンダーバー(_)はワイルドカード  スッキリした形で記述できる。
  • 12. タプルを使うと更にスッキリする let FizzBuzz3 num = match (num%3, num%5) with |(0, 0) -> "FizzBuzz" |(0, _) -> "Fizz" |(_, 0) -> "Buzz" |_ -> string x
  • 13. パターンマッチの魅力  すべてのパターンに到達可能かどうか、またすべての パターンを網羅しているかを事前に警告してくれる。 > let FizzBuzz3 x = match (x%3, x%5) with |(0, 0) -> "FizzBuzz" |(0, _) -> "Fizz" |(_, 0) -> “Buzz“ FizzBuzz.fs(18,16): warning FS0025: この式のパターン マッチが不 完全です たとえば、値 '(1,1)' はパターンに含まれないケースを示 す可能性があります。 val fb : x:int -> string
  • 17. 手順  Visual Studio 2010 Professionalをインストール →プロジェクトのテンプレートが2010のみ対応のため  Visual Studio 2010 Service Pack 1 をインストール http://www.microsoft.com/ja-jp/download/details.aspx?id=23691  Microsoft Silverlight 4 Tools for Visual Studio 2010 をインストール http://www.microsoft.com/ja-jp/download/details.aspx?id=18149  Windows Phone SDK 7.1 と SDK7.1.1更新プログラムをインストール http://www.microsoft.com/ja-jp/download/details.aspx?id=27570 http://www.microsoft.com/ja-jp/download/details.aspx?id=29233  開発テンプレート F# and C# Win Phone App (Silverlight) をインストール http://visualstudiogallery.msdn.microsoft.com/17454c58-c1d9-4640-afe1-7943db13891e/
  • 18. 手順  ファイル→新規作成→プロジェクト  Visual F#→WP7→F# and C# Windows Phone Application (Silverlight)を選択  作成して実行してみる
  • 19. ここで問題発生  以下のようなエラーが出る  F# runtime for Silverlight version v4.0 is not installed.  Please go to http://go.microsoft.com/fwlink/?LinkId=177463 to download and install matching F# runtime  F# for Silverlight Runtime がインストールされていない  Microsoft Silverlight 4 Tools for Visual Studio 2010 に含ま れてるはずなのに・・・
  • 20. 仕方ないので  Microsoft Silverlight 4 Tools for Visual Studio 2010 の 実行ファイルからF# for Silverlight Runtime のインス トーラを取り出して実行  Explzhを使って取り出した http://www.ponsoftware.com/  FSharpRuntimeSL4.msi を実行
  • 21.
  • 23. 構成  AppとAppHostに分かれる  App.xaml、App.xaml.csは通 常と同じ  MainPage.xamlにビュー  AppLogic.fsにロジック
  • 24. 書きやすい?  正直まだ分からん  複雑なロジックを簡潔に記述できるかもしれない  F#のサポートが弱いのがつらい  → テンプレートがVS2010のみ対応だし、ストアア プリはできなさそう  ライブラリ作って呼び出すのは可能なはず