ラベル F# の投稿を表示しています。 すべての投稿を表示
ラベル F# の投稿を表示しています。 すべての投稿を表示

2020年11月5日木曜日

【F#】演算子

 F#で計算する時に使用する演算子をまとめてみました。

1、 算術演算子/型の変換を行う演算子

7 + 2;;			//足し算
7 - 2;;			//引き算
7 * 2;;			//かけ算
7 / 2;;			//割り算(商)
7 % 2;;			//割り算(余)
-7;;			//符号の反転
not true;;		//論理値の否定。bool値のみ
 
ここで紹介した二項演算子は、基本的に
同じ型の数値型同士でしか使えないので、型変換が必要となります。
1.0 + float(2);;  
 
2、 値の大小比較や、値が等しいか
1=2;;		//1と2が等しいかどうか
1<>2;;		//1と2が異なるかどうか
1<2;;		//1が2より小さいかどうか
1>2;;		//1が2より大きいかどうか
1<=2;;		//1が2以下であるか
1>=2;;		//1が2以上であるか
max 1 2;;	//1と2のうち大きい方
min 1 2;;	//1と2のうち小さい方
 
3、 数値計算を扱う際に使用できる演算子
let pi = 3.1415926535;;	//円周率
2.0 ** 3.0;;		//冪。2の3乗を計算して8.0
pown 2 3;;		//整数の冪。2の3乗を計算して8
abs (-10);;		//絶対値を返す。この値は10
acos (-1.0);;		//cosの逆関数。この値はpi
asin 1.0;;		//sinの逆関数。この値はpi/2.0
atan 1.0;;		//tanの逆関数。この値はpi/4.0
atan2 1.0 1.0;;		//tan(引数1/引数2)の逆関数。
ceil 1.5;;			//天井関数。x以上の最小の整数に丸める。この値は2.0
ceil (-1.5);;		//この値は-1.0
cos pi;;			//cosine関数。この値は-1
exp 1.0;;			//自然対数の冪。この値は2.718281828
floor 1.5;;		//床関数。x以下の最大の整数に丸める。この値は1.0
floor (-1.5);;		//この値は-2.0
log (exp 1.0);;		//自然対数。この値は1.0
log10 (10.0**2.0);;	//常用対数。この値は2.0
round 0.5;;		//入力値にもっとも近い整数に丸める。結果は0.0
round 1.5;;		//入力値にもっとも近い整数に丸める。結果は2.0
sign 10;;			//符号を返す。この値は1
sign 0;;			//この値は0
sing (-3);;		//この値は-1
sin (pi/2.0);;		//sine関数。この値は1.0
sqrt 4.0;;		//平方根。この値は2.0
tan (pi/4.0);;		//tangent関数。この値は1.0 
 
4、 パイプライン演算子、合成演算子
let sub10 x = x - 10;;
10 |> sub10;;		//パイプライン演算子|>。結果は0
10 |> sub10 |> sub10;;	//-10。((10 |> sub10) |> sub10)と評価 
 
let add1 x = x + 1;;		//1足す関数
int twice x = x * 2;;		//2倍にする関数
let add1twice = add1 >> twice;;	//関数合成。1足して二倍にする関数
let twiceadd1 = add1 << twice;;	//関数合成。二倍して1足す関数
add1twice 10;;			//結果は22
twiceadd1 10;;			//結果は21
 
5、 小数点以下の部分を取得する
let vTo = "3.14" 
let strTo = vTo.ToString().Split('.')
let nvTo = float strTo.[0] //3.0
let fvTo =float ("0." + strTo.[1])  //0.14
 
 【参考URL】

2018年9月23日日曜日

【F#】F# リファレンス ~シンボルとキャスト、Match

1、シンボルと演算子の表
F#でまずなやむのがシンボルです。

次のURLでは、F# 言語で使用されるシンボルについて説明し、より詳しい情報が提供されるトピックへのリンクと、シンボルの使用方法の一部の簡単な説明がなされています。
https://docs.microsoft.com/ja-jp/dotnet/fsharp/language-reference/symbol-and-operator-reference/

例えば、
:> ・・・ キャストと変換で使います。
:? ・・・ match式で使います。指定された型に値が一致する場合は true を返します。それ以外の場合は、false を返します (型テスト演算子)。

キャストについては次のURLに詳しく書いてあります。
https://docs.microsoft.com/ja-jp/dotnet/fsharp/language-reference/casting-and-conversions

(2) Match式
他の言語で使われるswitch式に該当します。
【参考URL】

https://docs.microsoft.com/ja-jp/dotnet/fsharp/language-reference/match-expressions

【F#】F# リファレンス

F#始めました。
しかし、市販されている本も少なく、またサイトにある情報も少ないので、
すこしづつ情報をまとめていきたいとおもっています。

【参考URL】
https://docs.microsoft.com/ja-jp/dotnet/fsharp/language-reference/index

1、値(value)と型(type)
F#の値(value)は、特定の型(type)を持つ数量(quantity)です。
値は変更不可ですがが、
キーワード mutable を使用して、変更可能な変数を指定できます。
> let mutable x = 1
> x <- x + 1
 ・・・<-で値変更する
【参考URL】
http://fsharpintro.net/value.html

2、ラムダ式(匿名関数/無名関数)
fun pat1 ... patn -> expr
  funがラムダ式が始まることを示すキーワードで
  exprは様々な式のこと、つまり関数の本体です。
> fun x -> x + 1

関数を適用するための構文は次のようになります。
expr expr | expr(expr)
式全体を括弧で囲む必要がある点です。
> (fun x -> x + 1) 10

今度は引数が2つの関数です。
> ((fun x y -> x + y) 10) 20
> (fun x y -> x + y) 10 20

※返り値:関数本体部分の一番最後の式の値が返り値になります。
> (fun x -> x 10) (fun y -> y + 1)
val it : int = 11

引数の無い関数も定義はつぎのようにします。
> (fun () -> 10) ()
val it : int = 10

3、letを用いた関数定義
let ident pat1 ... patn return-typeopt = bodyexpr
let ident pat1 ... patn return-typeopt = bodyexpr in expr
 identは、定義する関数の名前です。演算子も定義出来ます
 pat1 ... patnは、引数で、匿名関数のところで説明したものと全く同じです
 return-typeoptは、定義する関数の型の注釈で、省略可能です
 bodyexprは関数本体に相当する式です。
> let add x y = x + y //2つの入力をとり、それらを加算する関数
> add 10 20
> let add2 = fun x y -> x + y
> add2 10 20

4、letの構文
let recを用いた関数定義(再起関数)
let rec ident pat1 ... patn return-typeopt = bodyexpr
let rec ident pat1 ... patn return-typeopt = bodyexpr in expr
>let rec fact n =
> if n=1 then
>  1
> else
>  n * fact(n-1)
> fact 5

5、参照型
参照型を使えば、値を変更可能(mutable)にできます。
値を参照型に変更するにはrefを使います。
また、!参照型とすることで、値の参照が、
参照型:=値とすることで値の変更を行うことができます。
let a = ref "hello";;
//aの値を参照
!a ^ " world";;  ---->val it : string = "hello world"
//aの値を変更
a := "hi";;
//aの値を参照
!a ^ " world";;

リストに要素を付加するには、:: (cons) 演算子を使用します。
let pdmList=ref []
pdmList:=pdm:: !pdmList  // := は参照に値を挿入 !pdmListは、pdmListの参照値 ::は結合
let tr=[tr1;tr2;tr3]|>List.max // リスト[tr1;tr2;tr3]を|>演算子を使って、List.maxを実行

6、option型
これを使うと、「値がないか、何かの値がある」ことを表すことが出来ます。
option型のデータを操作するには
パターンマッチを用います。
type 'a option =
 | None  //値がない場合
 | Some of 'a //値がある場合