3
何に何を割り当てることができますか?
関連した 何に何を割り当てることができますか? この課題では次の2つのタイプを与え、されるAとBしてかどうかを判断Aに割り当て可能であるB、Bに割り当て可能であるA、またはどちらも。 型システム (私はtあらゆるタイプを表すために使用します) 基本的なタイプ 基本タイプは、などの単一の大文字で表されXます。彼らは基本的にクラスです。 X割り当て可能であるY場合Yと同じか、またはの親クラスですX。 交差点タイプ 交差タイプはで表されintersect<X, Y>、の間に任意の数のタイプを含めることができます<(たとえばintersect<X, Y, Z, D, E>)。 tがすべてに割り当て可能なintersect<X1, X2... Xn>場合tに割り当て可能Xです。 intersect<X1, X2... Xn>に割り当て可能なものがtあれば、Xに割り当てられtます。 ユニオンタイプ ユニオンタイプはで表されunion<X, Y>、の間に任意の数のタイプを含めることができます<(たとえばunion<X, Y, Z, D, E>)。 tがに割り当て可能なunion<X1, X2... Xn>場合tはに割り当て可能Xです。 union<X1, X2... Xn>割り当てているtすべての場合Xにアサインされていますt。 入力 入力として受け取ります: クラス階層。クラス階層の入力方法を選択できます。ツリーの表現、または親のリストを含む各タイプ、またはクラス階層を正確に表すその他のものを入力できます。 2つのタイプ(表記に一貫性がある限り、入力は柔軟ですが、これらのタイプを自由に受け取ることができます)。 出力 次の3つの一貫性の異なる値の出力1を意志、それらを呼び出すX、YとZ。2種類を考えるAとB、出力X場合Aに代入されB、出力Yの場合はBに割り当て可能でA、出力Zそうでない場合(IFがAに割り当て可能であるBとBに割り当て可能であるA、あなたを出力してもよいX、Y両方、または4番目の値)。 テストケース フォーマット: # of types [type, parents...] [type, parents...] Type …