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つのスタックであるため、タプルをクライアントに返す必要がないことを理解しています。
それでも、それは機能的な方法ではありませんよね?