OCamlを半年ほど勉強した後も、いまだに苦労していfunctional programmingますimperative programming。
についてではなくusing list or array、API の設計についてです。
たとえばstack、ユーザー向けに書き込もうとしている場合、それをどのような方法で提示する必要がありますfunctional かimperative?
stackという関数が必要popです。これは、最後の要素をユーザーに返し、スタックから削除することを意味します。だから、私が自分stackのfunctionalやり方で設計した場合、 for pop、タプルを返す必要があり(last_element, new_stack)ますよね? しかし、それは醜いと思います。
同時に、functional関数型プログラミングの方が自然だと思います。
では、この種の設計上の問題をどのように処理すればよいでしょうか。
編集
stackのソースコードを見たところ、次のように型が定義されています。
type 'a t = { mutable c : 'a list }
わかりました、内部的に標準の liblistは不変のものを使用しますが、それを変更可能なレコードにカプセル化します。
このように、ユーザーにとっては常に1つのスタックであるため、タプルをクライアントに返す必要がないことを理解しています。
それでも、それは機能的な方法ではありませんよね?