Linuxシェルでは、「ls」と入力すると、「/ Desktop、/Music...」のようになります。
haskellのようないくつかの動的プログラミング言語の対話型環境でいくつかの同様の関数を実行すると、環境の出力は関数の結果であることは明らかです。表示されるすべての結果は「印刷」によって暗黙的に変換されますが、出力はかつては関数の結果でした。
Linuxコマンドの出力がIOアクションなのか、関数の結果なのかを知りたいだけです。
C 言語は、プログラムを関数に分割します。ls、find、pwd などのユーティリティのソースコードのほとんどは、シェル (「bash」など) の一部として C で記述されています。シェルも通常 C で記述されているか、別のプログラム。
もちろん、C カーネル コードへの適切なバインディングがあれば、Linux ユーティリティ スイート全体を、lisp、haskell、ocaml、または十分な機能を備えた他の言語で作成できます (そのほとんどは文字列処理に関するものであり、大多数の言語で使用されます)。できる)。
ただし、関数型言語には「真の関数」があると想定されています。つまり、関数には副作用があってはなりません。定義によると、ファイルへの書き込み、ファイルの読み取り、または画面への出力は副作用です。関数自体の外部に影響を与え、結果は関数から返されるものではありません。その意味で、C は関数型プログラミング言語ではありません。それはかなり頻繁に副作用を伴う機能を持っています。
関数は IO アクティビティを開始できませんか?
基本的な linux/Unix ユーティリティはすべて C 言語で記述されており、幅広い関数ライブラリを使用して情報を収集します。これらの関数の一部は、ディスクの読み取りやその他の I/O を開始する可能性があります。通常、出力は、printf
一致する適切な書式文字列と引数を使用して、関数を使用して生成されます。繰り返しますが、I/O が増えます。
IHTH。
あなたが知りたい詳細を提供するために、この質問にどのように答えればよいかわかりません。
もちろん、それらは IO 操作 (ファイルの読み取り、ファイルの書き込み、stdout への書き込み – これもファイル) を実行していますが、確かに関数内の作業 (出力のフォーマットなど) も実行しています。