0からわかるF# Part1 中 博俊 F# September 2008 CTP Base.

Slides:



Advertisements
Similar presentations
プログラミング演習B ML編 第1回 2006/6/20 (通信コース) 2006/6/28 (情報コース) 住井 ~sumii/class/proenb2006/ml1/
Advertisements

本プレゼンテーション ( 以下、本書 ) で提供されている情報は、本書が 発表された時点における Microsoft の見解を述べたものです。市場 ニーズの変化に対応する必要があるため、本書は記載された内容の実 現に関する Microsoft の確約とはみなされないものとします。また本 書に記載された情報の正確さについて、保証するものではありません。
オブジェクト指向 言語 論 知能情報学部 新田直也. 講義概要  私の研究室: 13 号館 2 階 (13-206)  講義資料について :  参考図書 : 河西朝雄 : 「原理がわかる プログラムの法則」,
Scala + Liftフレームワーク その2.
(Rubyistのための) 超音速:ML入門
ML 演習 第 1 回 佐藤 春旗, 山下 諒蔵, 前田 俊行 May 30, 2006.
1.1 C/C++言語 Hello.ccを作りコンパイルしてa.outを作り出し実行する
オブジェクト指向言語論 知能情報学部 新田直也.
最適化ソルバーのための Python言語入門
プログラミング演習II 2004年10月19日(第1回) 理学部数学科・木村巌.
プログラミング言語論 理工学部 情報システム工学科 新田直也.
プログラミング言語論 理工学部 情報システム工学科 新田直也.
第6章 2重ループ&配列 2重ループと配列をやります.
条件式 (Conditional Expressions)
はじめてのASP.NET 楽しいアプリ制作の会 #1 TWorks.

配列の扱い、探索 有効範囲と記憶域期間 第12回 [7月10日、H.15(‘03)] 今日のメニュー 1 前回の課題の復習
配列の扱い、探索 有効範囲と記憶域期間 第12回 [7月6日、H.16(‘04)] 今日のメニュー 1 前回の課題の復習
オブジェクト指向 プログラミング 第一回 知能情報学部 新田直也.
2007/1/11 山下 諒蔵 佐藤 春旗 前田 俊行 大山 恵弘 佐藤 秀明 住井 英二郎
C#とC++とオブジェクト指向 上甲 健史.
ML 演習 第 7 回 新井淳也、中村宇佑、前田俊行 2011/05/31.
プログラミング言語論 第12回 関数型プログラミング 情報工学科 篠埜 功.
2007/6/5(通信コース)2007/6/6(情報コース) 住井
~sumii/class/proenb2010/ml1/
プログラミング言語入門 手続き型言語としてのJava
0からわかるF# Part1 中 博俊 F# September 2008 CTP Base.
0からわかるF# Part1 中 博俊 F# September 2008 CTP Base.
Windows Azure (CTP) 触ってみた
VS2010はここがすごい 中 博俊.
暗黙的に型付けされる構造体の Java言語への導入
VS2010はここがすごい 中 博俊.
VS2010はここがすごい 中 博俊.
プログラミング応用 printfと変数.
R流・C#マルチスレッドの復讐 2009年05月16日 R・田中一郎
50年前のプログラミング言語 50年後のプログラミング言語
0からわかるF# Part1 中 博俊 F# September 2008 CTP Base.
Microsoft Visual Studio 2005 Tools for
0からわかるF# Part1 中 博俊 F# September 2008 CTP Base.
~sumii/class/proenb2009/ml1/
プログラミング言語論 第五回 理工学部 情報システム工学科 新田直也.
オブジェクト指向言語論 第八回 知能情報学部 新田直也.
Windows Azure (CTP) 触ってみた
VS2010はここがすごい 中 博俊.
0からわかるF# Part1 中 博俊 F# September 2008 CTP Base.
2007/6/12(通信コース)2007/6/13(情報コース) 住井
15.1 文字列処理の基本 15.2 文字列処理用ライブラリ関数
C言語ファミリー C# 高級言語(抽象的) Java オブジェクト指向 C++ C 機械語(原始的)
プログラミング言語論 第十一回 理工学部 情報システム工学科 新田直也.
プログラミング入門2 第6回 関数 情報工学科 篠埜 功.
~sumii/class/proenb2010/ml2/
2006/7/18(通信コース)2006/7/26(情報コース) 住井
オブジェクト指向言語論 第五回 知能情報学部 新田直也.
2006/6/27(通信コース)2006/7/5(情報コース) 住井
VS2010はここがすごい 中 博俊.
第6回放送授業.
~sumii/class/proenb2010/ml5/
標準入出力、変数、演算子、エスケープシーケンス
オブジェクト指向言語論 第九回 知能情報学部 新田直也.
How To WPF アプリケーション Part4 By 中博俊.
プログラミング入門2 第6回 関数 情報工学科 篠埜 功.
PROGRAMMING IN HASKELL
オブジェクト指向言語論 第一回 知能情報学部 新田直也.
Javaとは Javaとはオブジェクト指向言語でJava VM(Java仮想マシン)と呼ばれるプログラム上で動作します。
オブジェクト指向言語論 第六回 知能情報学部 新田直也.
C#プログラミング実習 第1回.
オブジェクト指向言語論 第九回 知能情報学部 新田直也.
第1章 文字の表示と計算 printfと演算子をやります 第1章 文字の表示と計算.
プログラミング言語Ⅰ(実習を含む。), 計算機言語Ⅰ・計算機言語演習Ⅰ, 情報処理言語Ⅰ(実習を含む。)
第1章 文字の表示と計算 printfと演算子をやります.
Presentation transcript:

0からわかるF# Part1 中 博俊 F# September 2008 CTP Base

Visual Studio 2010(次のバージョン)でリリースされる予定 F#ってなに? Visual Studio 2010(次のバージョン)でリリースされる予定 関数型言語 Ocamlモチーフ

手続きだけの言語 Cobol, Fortran ↓ 構造化言語 Cobol78, C ↓ 勝手に言語トレンド 手続きだけの言語 Cobol, Fortran ↓ 構造化言語 Cobol78, C ↓ オブジェクト指向言語 C++, Java, C# ↓ ダイナミック言語 Python, Ruby ↓ 関数型言語 Ocaml, Haskell, F#

今は気にしなくていいです! いろいろ複雑な定義がありますが・・・ 状態を持たないから、副作用を持たない 遅延評価を行う リスト構造が基本 関数型言語って何? いろいろ複雑な定義がありますが・・・ 状態を持たないから、副作用を持たない 変数の書き換えが出来ないという意味 遅延評価を行う リスト構造が基本 λ式(ラムダ式) カリー化 今は気にしなくていいです! ←カリー博士にちなんで命名

Lisp(‘58) ML(’73) Caml(‘85) Haskell(‘87) Ocaml(‘96) Scala(‘03) F#(‘09) 関数型言語の系譜 Lisp(‘58) ML(’73) Caml(‘85) Haskell(‘87) Ocaml(‘96) Scala(‘03) F#(‘09)

環境作り Visual Studio 2008 Microsoft F#, September 2008 Community Technology Preview http://www.microsoft.com/downloads/details.aspx?FamilyID=61ad6924-93ad-48dc-8c67-60f7e7803d3c&displaylang=en たったこれだけ

プロジェクトが追加されている

まとりあえずHello World. DEMO #1 #light printf "Hello F# World"

DEMO #2 System.WindowsForms.Dllを参照 System.Windows.Forms.MessageBox.Show "Hello World"

日本語対応してないから本格的には使えない。。。 コンソールモードでやるよ! C:\Users\vaioz\Desktop\FSharp-1.9.6.2\bin\fsi.exe これでコンソールモードです。 日本語対応してないから本格的には使えない。。。

1~10までの二乗を表示するプログラムC#1.0版 ArrayList numbers = new ArrayList(); for (int i = 1; i <= 10; i++) { numbers.Add(i); } ArrayList squares = new ArrayList(); for (int i = 0; i < numbers.Count; i++) { squares.Add((int)numbers[i] * (int)numbers[i]); } Console.Write("N^2 = {"); for (int i = 0; i < squares.Count; i++) { Console.Write(squares[i] + "; "); } Console.Write("}"); Console.ReadKey(true);

1~10までの二乗を表示するプログラムC#2.0版 List<int> numbers = new List<int>(); for ( int i = 1; i <= 10; i++ ) { numbers.Add(i);} List<int> squares = numbers.ConvertAll( delegate(int x ) { return x*x; }); Console.Write("N^2 = {"); squares.ForEach(delegate(int x ) { Console.Write(x + "; "); }); Console.Write("}"); Console.ReadKey(true);

1~10までの二乗を表示するプログラムC#3.0版 var numbers = Enumerable.Range(1, 10); var squares = (from x in numbers let square = x*x select square).ToList(); Console.Write("N^2 = {"); squares.ForEach(x => Console.Write(x + "; ")); Console.Write("}"); Console.ReadKey(true);

1~10までの二乗を表示するプログラムF#版 #light let numbers = [1 .. 10] let square x = x * x let squares = List.map square numbers printfn "N^2 = %A" squares System.Console.ReadKey(true)

絵にしてみた 遅延評価されている

関数型言語の特徴 リスト構造をおさらい

無名関数 いちいち関数を let square x = x * x って書くのは面倒ですよね? その場合無名関数を使います。 List.map square numbers を List.map (fun x -> x*x) numbers; と記述することが出来ます。

カリー化 別に何も難しいことではありません > let add a b = a + b;; val add : int -> int -> int > add 1 2;; val it : int = 3 > let add1 a = add 1 a;; val add1 : int -> int > add1 3;; val it : int = 4

Tuple > [1,2,3];; val it : (int * int * int) list = [(1, 2, 3)] > [1,"abc"];; val it : (int * string) list = [(1, "abc")] > [[1,'a'];[2,'b']];; val it : (int * char) list list = [[(1, 'a')]; [(2, 'b')]]

List IntのList > [1;2;3];; val it : int list = [1; 2; 3] > [1..3];; > [1..2..10];; val it : int list = [1; 3; 5; 7; 9] List.map fun list すべてのList要素に関数を適用して、新しいリストを定義する。 List.length list List.max List.sum

Array >[|1;2;3|];; val it : int array = [|1; 2; 3|] >let arr = Array.create 2 “" >arr.[0] <- “Hello, ” >arr.[1] <- “F# world” > Array.map (fun x -> printfn "%A" x) arr;; "Hello, " "F# world" val it : unit [] = [|null; null|]

シンプルループ for i = 0 to 100 do printfn "%d" I 列挙ループ [for i in 0..100 -> i*i]

パイプ let pow x = x*x;; val pow : int -> int > pow 3;; val it : int = 9 > 4 |> pow;; val it : int = 16 > pow <| 5;; val it : int = 25

各種ライブラリ

.NET使おうよね > 4u.ToString();; val it : string = "4” > open System.Collections.Generic > let lst = List<string>();; val lst : List<string> > lst.Add("ABC");; val it : unit = () > let printfn2 x = printfn "%A" x;; > Seq.map (fun x -> printfn "%A" x) lst;; "ABC" "DEF" "GHI" val it : seq<unit> = seq [null; null; null]

.NET使おうよね2 #light open System.IO let stream filename = System.IO.File.Open(filename, FileMode.Open) let reader = new StreamReader(stream "C:\\temp\\a.txt") let filevalue = reader.ReadToEnd() (fun x -> printfn "%A" x) filevalue reader.Close()

まとめ+次回予告 今回は難しいのであえてはずした 型作成 パターンマッチング 非同期

F# Developer Center http://msdn.microsoft.com/en-us/fsharp/default.aspx Spec http://research.microsoft.com/en-us/um/cambridge/projects/fsharp/manual/spec2.aspx Library http://research.microsoft.com/en-us/um/cambridge/projects/fsharp/manual/namespaces.html

Blogなど http://msdn.microsoft.com/ja-jp/magazine/cc164244.aspx http://blogs.msdn.com/dd_jpn/archive/2008/07/03/8684353.aspx Wikipedia http://ja.wikipedia.org/wiki/F_Sharp