2012-10-24 20 views
12

Typed Racketはどんなタイプの推論をしますか?私は、ラケットのメーリングリスト上で次のスニペットが見つかりました:型付きラケットの型推論はどのように機能しますか?

The Typed Racket type system contains a number of features that go beyond what's supported in Hindley/Milner style type systems, and so we can't use that inference system. Currently, Typed Racket uses local type inference to infer many of the types in your program, but we'd like to infer more of them -- this is an ongoing area of research.

を上記の宣伝文句は、「ローカル型推論」という用語を使用し、私も聞いた「発生タイピング」多くを使用しますが、私は正確ではありませんよこれらの用語が何を意味するか。

Typed Racketが現在使用している型推論システムは不必要に弱いと思われます。ここに私が意味するものの例があります。以下は型チェックしません:

(struct: pt ([x : Real] [y : Real])) 

(define (midpoint p1 p2) 
    (pt (/ (+ (pt-x p1) (pt-x p2)) 2) 
     (/ (+ (pt-y p1) (pt-y p2)) 2))) 

あなたが明示的に(: midpoint (pt pt -> pt))midpointに注釈を付ける必要があり、そうでなければ、エラーを取得:Type Checker: Expected pt, but got Any in: p1を。タイプチェッカーでは、p1p2のタイプがの場合はptであると結論づけることはできません。これは、ラケットがタイプを実装する方法の根本的な制限ですか(つまり、ラケットのより高度なタイプの機能のために、実際にが間違ってのこのラインです)、またはこれは将来実現される可能性がありますか?

+6

:http://www.ccs.neu.edu/racket/pubs/dissertation-tobin-hochstadt.pdf – dyoo

答えて

6

既定では、注釈なしのトップレベル関数は入力と出力の型がAnyであると見なされます。私はこのあいまいな説明を提供しています:ラケットタイプのシステムはですので、柔軟性があります。あなたが予想しないタイプを推測することがあり、タイプエラーを出すことを望むときにタイプチェックを行うプログラムがあります。

タンジェント:define:フォームを使用することもできます。サム・トービン-ホックシタットの博士論文は、血みどろの詳細を持っている必要があり

(define: (midpoint [p1 : pt] [p2 : pt]) : pt 
    ...) 
+1

はこの回答への追加:I'LLを週の任意の曜日に "賢明"以上に "明確に定義された"ものを取ります。 「賢い」という問題は、プログラマとしては、遅かれ早かれ、チェック可能とチェック不可能の境目のちょうど反対側のどこかに巻き上げようとしているので、コードを変更する方法を理解しなければならないチェッカーがそれを検証できることを確認します。このような状況では、魅力的な巧みさを知ることは非常に困難です。 –

+1

本当に根本的な制限はないように思えます - 代わりに、タイプの良いプログラムとそうでないプログラムのあいだに曖昧な灰色の領域があります(そして、この領域は他の型よりも型付きラケットのほうが大きいかもしれませんRacketシステムは非常に柔軟なシステムなので、型付きラケットの推論を設計した人々は、できるだけその境界線から遠く離れていただけでした。型推論が起こりうる明確なケースはほんのわずかであり、その他は明示的に宣言する必要があります。そうすれば、混乱した混乱を避けることができます。それは正しいのでしょうか? – Ord

+0

@Ordそれはほぼ正しいです。詳細についてはSamの論文を読むことができます。彼はこの質問にセクションの一部を捧げます:セクション3.2。 –

関連する問題