28603


つまりC#で言うところの

[code]

    var str = "example;
    Console.WriteLine(str);
    Console.WriteLine(DateTime.Now);
    
[/code]

のようなことをしたいのですが、`printfn` を使った場合、第一引数は常に書式文字列として扱われてしまうため、次のコードはエラーになります。

[code]

    let str = "example"
    printfn str
    printfn DateTime.Now
    
[/code]

> error FS0001: 型 'string' は型 'Printf.TextWriterFormat<'a>' と互換性がありません

このエラー自体は合点がいきますし、次のように書くのが正しいでしょう。

[code]

    printfn "%s" str
    printfn "%O" DateTime.Now
    
[/code]

ただ、これだけのために書式文字列を指定するのは無駄な処理をしているように見えます。

`Console.WriteLine(string)` や `Console.WriteLine(object)`
のように、単一の文字列やオブジェクトの出力に特化した関数はないのでしょうか？

* * *
[code]

    Console.WriteLine str
    Console.WriteLine DateTime.Now
    
[/code]

と直接Consoleクラスのメソッドを呼び出すことはできますが、F#版の関数が用意されているならそれを使った方がいいのでは、と思った次第です。それとも上記メソッドを直接呼び出せばいいのでしょうか。

（標準関数のprintfとクラスライブラリのConsoleみたいな違いを感じているというか・・・）


CC BY-SA 3.0
2016-08-31T03:11:55.490
28592
2016-08-31T10:52:14.323
2016-08-31T03:59:48.580
8000
8000
question
f#
単一のstringやオブジェクトを標準出力に出力するには？


ざっと[Microsoft.FSharp.Core リファレンス](https://msdn.microsoft.com/en-
us/visualfsharpdocs/conceptual/microsoft.fsharp.core-namespace-%5bfsharp%5d)
を眺めて見たのですが、相当するような関数は見当たらないようです。

[Getting Started...](https://docs.microsoft.com/ja-
jp/dotnet/articles/fsharp/tutorials/getting-started/getting-started-visual-
studio)を見ると、  
つらっと文字列の表示で  
`System.Console.WriteLine(aString)`  
なんて例があるのでおそらくは文字列のみを標準出力に出力するF#の関数は用意されていないのだと思います。


CC BY-SA 3.0
2016-08-31T08:25:48.783
28599
2016-08-31T08:25:48.783
5044
28592
answer


[F#のPrintfモジュール](https://msdn.microsoft.com/ja-
jp/visualfsharpdocs/conceptual/core.printf-
module-%5Bfsharp%5D)は[OCamlのPrintfモジュール](http://caml.inria.fr/pub/docs/manual-
ocaml/libref/Printf.html)を基にしています。ですので`System.Console`はあまり意識されていません。例えば`CurrentCulture`を無視しますので

[code]

    System.Globalization.CultureInfo.CurrentCulture <- System.Globalization.CultureInfo "de"
    System.Console.WriteLine("{0:f2}", 12.34)  // 12,34
    printfn "%.2f" 12.34                       // 12.34
    
[/code]

といった違いもあります。ですのでOCaml風フォーマッタと考えるべきかと思います。  
（その割に`printfn`とか日和った関数があるんですよね…。）


CC BY-SA 3.0
2016-08-31T10:52:14.323
28603
2016-08-31T10:52:14.323
4236
28592
answer