2016-10-08 3 views
2
let ttnf x = 
    if (x % 2 = 0) || (x % 3 = 0) && not(x % 5 = 0) then true 
     else 
      false 

対話型パネルのVisual Studio 2015からの奇妙な応答を取得します。 私は、それが二回目でそれを返すF#関数xは2または3で割り切れますが、5ではない5

ttnf 15 

が入るヒット、何も... ヒットaltは+入らない...と言う入力し、その後F#インタラクティブパネルに上記のコードを実行します。 それはそれ自体で

ttnf 15 

に入るの真/偽を返すされていない理由を任意のアイデア?

ありがとうございました。

+1

多くの初心者の質問があります。私はあなたがFSSFに加わりたいと思うと思います。初心者を助けるためのアクティブなチャンネルがあります。ウェブサイトにサインアップしてしばらくすると、招待状が届きます。ご不明な点がございましたら、[F#chat](http://chat.stackoverflow.com/rooms/51909/f)でpingを入力してください。 –

+4

'&&'は '||'より優先度が高いので、カッコを付け加えてください: 'let ttnf x =(x%2 = 0 || x%3 = 0)&& x%5 <> 0' – ildjarn

答えて

3

@ildjarnはコードのエラーについてコメントしましたが、F#対話の動作についてコメントしました:fsiにコードを直接入力すると、fsiに解釈させるために、それぞれの宣言を;;で終了する必要があります。 (あなたが経験したように)あなたの入力を継続する。だから:

> let ttnf x = 
    if (x % 2 = 0 || x % 3 = 0) && not(x % 5 = 0) then true 
     else 
      false;; 

val ttnf : x:int -> bool 

> ttnf 15;; 

val it : bool = false 

> 
+5

@ildjarnコメントの "他の(無名の)部分"; 'if cond、then else false'のようなパターンを持っているならば。 'cond'が' true'なら 'true'を返し、そうでなければ' cond'が 'false'を返します。真理値として 'cond'を直接返すことができます。 – Sehnsucht

関連する問題