2010-12-30 45 views
6

私はJavaのバックグラウンドでLispを学び始めています。 SICPの演習では、学生がexercise 3.11関数の引数が多すぎます

(define (filtered-accumulate combiner null-value term a next b filter)...) 

のような多くのパラメータ、との抽象関数を作成する必要があり、多くのタスクがあります。 Java(安全な静的型付け規律を持つ言語)では、4つ以上の引数を持つメソッドは通常臭いがありますが、Lisp/Schemeではそれはありませんか?私はあなたの関数にいくつの引数を使用しているのだろうかと思います。プロダクションで使用する場合は、いくつのレイヤーを作成しますか?

+1

4つ以上の引数を持つメソッドで何が問題になっていますか? – Falmarri

+0

@Falmarri、通常、そのようなAPI +を念頭におくのは難しいです。あなたは議論の順序で間違えることがあります。 –

+1

これらは、4つの引数に自分自身を制限する理由のようには聞こえません。 – Falmarri

答えて

12

SICPは、入門コンピュータサイエンスコースで使用される本です。いくつかの高度なコンセプトについて説明していますが、非常に小さな言語、Scheme言語のサブセット、そして実際のSchemeやLispのサブセットの典型的な実装が提供しています。

たとえば、SICPで開発されたマクロはありません。その標準スキームには、関数の位置パラメータだけがあることを付け加えます。 「本物の」のLispやスキーム1で

には、以下の一つ以上を使用することができます。

  • オブジェクトまたはレコード/構造(貧乏人の閉鎖)グループの事を。渡されたオブジェクトにはいくつかのデータアイテムが含まれています。そうでなければ 'spread'に渡す必要があります。

  • 省略可能な変数です。したがって、あるデフォルト以外の値を持つものを渡すだけでよい。

  • オプションの名前付き引数。これにより、より記述的な柔軟な引数リストが可能になります。

  • 計算された議論。引数の値またはデフォルト値は、他の引数に基づいて計算することができます。

以上は、より使いやすい関数インターフェイスの作成がより複雑になります。

Lispでは、引数の説明的な名前を付けるのが良いスタイルであり、インターフェイスのオンラインドキュメントも提供しています。開発環境では、関数のインタフェースに関する情報が表示されるため、通常、この情報はキーストロークだけであるか、自動的に表示されます。

また、ユーザ/開発者がインタラクティブにインタラクティブに使用して、実行時にその引数をチェックすることになっていると思われる任意のインタフェースにも適したスタイルです。

+0

ありがとうございます。私は詳細を読むでしょう) –

関連する問題