3

私は学部 2 年生で、Haskell の学習を始めたばかりです。私の問題は、型処理とパターン マッチングに関するものです。次のように、さまざまなパラメーターと、車のギアボックスがスティックまたはオートマチックの場合の仕様を含むタイプ Car を定義しました。

data Car = Stick [Char] Integer | Automatic [Char] Integer

このソリューションは、これまでのところ、車のパターン マッチングに対して見事に機能していますが、車を入力として取り、Stick/Automatic 情報を返す関数が必要であり、Stick/Automatic 処理を文字列に変更する必要はありません。取り扱い。その関数に指定する戻り値の型がわかりません。その戻り値の型は何でしょうか?

4

2 に答える 2

14

送信のタイプに新しいタイプを導入できます。

data TransmissionType = Stick | Automatic

車の定義を次のように変更します。

data Car = Car TransmissionType [Char] Integer

次に、関数を追加して型を取得できます

transmissionType :: Car -> TransmissionType
transmissionType (Car t _ _) = t

コンストラクターは 1 つしかないため、代わりにレコードを使用できます。

data Car = Car {
    transmissionType :: TransmissionType,
    field1 :: [Char],
    field2 :: Integer
}

定義を変更したくない場合は、関数を追加できます

isManual :: Car -> Bool
isManual (Stick _ _) = True
isManual (Automatic _ _) = False
于 2013-11-10T14:16:30.070 に答える
-6

Haskell では、コード (宣言) に記述する return-type はコンパイラ用ではありません。それはあなたのためです。コンパイラは関数の型を判断し、それが正しいかどうかをチェックします。

私がお勧めするのは、必要な機能を作成することです。(私はそれがどうあるべきかを本当に理解していません。)それが終わったら、ghci(コンパイラ、インタラクティブ)を開き、コードをロードします。次に、 :t を使用して、コンパイラにそれがどのタイプであるかを判断させます。その後、必要に応じて宣言に書き込むことができます。それは必要ない。

$ ghci
prelude> :load yourfile
prelude> :t yourfunction
于 2013-11-10T14:15:51.953 に答える