スポンサーサイト

上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。

F#入門基本編落穂拾い その36 Script Files

まずはVisual Studio を使わずにF# Interactiveを起動する方法から紹介します。
コマンドプロンプトからfsiと入力します。
 
C:\Users\T_GYOUTEN>fsi
 
Microsoft (R) F# 2.0 Interactive build 4.0.30128.1
Copyright (c) Microsoft Corporation. All Rights Reserved.
 
For help type #help;;
 
あとは普通のF#Interativeと同様です。
(例)
> printfn "hellow";;
hellow
val it : unit = ()
 
終了するには#quit;;と入力します。
 
> #quit;;
 
さて、これまではF#Interactiveを使用するときは、直接打ち込むか、visual studioで作成したソース部分をALT+retrunでF# Interacitveに食わせる形で使用してきました。今回紹介するのは、単独のF#Interactive用のソースファイル(スクリプトファイルと通常呼ばれます)を作成してそれをF# Interactiveに実行させる方法です。
 
まずは下の内容でスクリプトファイルをエディタで作成して保存してみます。ファイル名の拡張子をfsxとしておくことに留意してください。
(名前)scriptExample.fsx
 
(内容)
printfn "hello F#"
System.Console.ReadLine() |> ignore
 
保存できたら、コマンドプロンプトから fsi + ファイル名 で実行してみます。
 
(実行画面)
C:\Users\T_GYOUTEN\FSharp\Script>fsi scriptExample.fsx
hello F#
 
visual studio がインストールされているのであれば、Explorerでファイルを右クリックするとメニューに「Run with F# Interactive..」という項目が追加されているので、これを選択しても実行できます。
(実行画面)
hello F#
 
さて、通常のコンパイルスタイルや、visual studioを使ったソリューション、プロジェクトスタイルでプログラムを実行するのと、fsxファイル(スクリプトファイル)とF# Interactiveを使って実行する場合の違いはどこにあるのでしょうか。
 
一番大きな違いはスクリプトファイルを使って実行する場合は、参照の設定をファイル内で指定しなければならないということです。(FSharp.Core.dllはデフォルトで参照することになっているので、明記する必要はありません。)
これには、#rを用います。
 

#r "System.Windows.Forms.dll"
 
なお、#Iでpathを登録して,そのpathにdelファイルを探しにいくようにすることができます。

#I @"c:\WINDOWS\以下略"
 
またソースファイルをオープンして、その内容を使用することができます。これには #loadを用います。
 

 
ファイル名 sub.fs
内容
module example001
 
let mySum x y = x + y
do printfn "%d" (mySum 3 7)
 
ファイル名 scriptExample.fsx
内容
 
#load "sub.fs"
 
printfn "mySum Result = %d" (example001.mySum 1 1)
System.Console.ReadLine() |> ignore
 
これで、fsi scriptExample.fsxとすると次のようになります。
C:\Users\T_GYOUTEN\FSharp\Script>fsi scriptExample.fsx
10
mySum Result = 2
 
すなわちsub.fsで関数以外の値は評価(実行)された後に、スクリプトが実行されます。
この流れは、クラスライブラリをつくる時に便利です。ということで、visual studioでクラスライブラリの作成を選ぶと、デフォルトでは、次のようなファイル編成が作られるようになっています。
(ファイル名)
module1.fs
(内容)
module Module1
あと空白
 
(ファイル名)
Script.fsx
(内容)
#load "Module1.fs"
open Module1
あと空白
 
すなわち,module1.fsの方で関数等を定義して、スクリプトファイルを利用して、関数の動きを確認できるよう準備がなされているのです。(スクリプトファイルは使っても、使わなくてもできあがるDLLファイルに影響はありません。)
 
例えば次のようにしてみます。
(ファイル名)
module1.fs
(内容)
module Module1
 
let funcForTest x y  =
    x + y 
 
ここで一回保存しておきます。
 
スクリプトファイルを次のようにしてみます。
 
#load "Module1.fs"
open Module1
 
printfn "%A" ((funcForTest 2 3) = 5)
System.Console.ReadLine() |> ignore
 
スクリプトファイルの内容を全部選択して、F#Interactiveに送ります。すると

[Loading c:\users\t_gyouten\documents\visual studio 10\Projects\script1\script1\Module1.fs]
 
namespace FSI_0003
  val funcForTest : int -> int -> int
 
true
 
となります。
 
またスクリプトファイルを上書き保存して
Explorerから右クリックでF#Interactiveに送ると
 
true
 
と表示されます。
どちらの方法にせよ、fsファイルの方を一度保存してから、スクリプトファイルを入力(修正)するようにしてください。
「クラスライブラリでの関数等の定義部分と、テストしてみるファイルを分離するのに有用だ」ということです。
スポンサーサイト

テーマ : プログラミング
ジャンル : コンピュータ

コメントの投稿

非公開コメント

プロフィール

T GYOUTEN

Author:T GYOUTEN
F#と英単語とフリーソフトと読書に興味があります。
ホームページでフリーソフトも公開しています。どぞ御贔屓に。

最新記事
最新コメント
最新トラックバック
月別アーカイブ
カテゴリ
フリーエリア
フリーエリア
blogram投票ボタン
検索フォーム
RSSリンクの表示
リンク
ブロとも申請フォーム

この人とブロともになる

QRコード
QRコード
上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。