1

次の問題を解決しようとしています-すべてのセレクター(e ^ i_n)といくつかのブール関数({f_1, f_2, f_n})がクロージャー([f_1、f_2、..f_n]内)でn個の引数のすべての関数を列挙する場合。

そこで、BooleanFunctionClass と実在する BooleanFunction 型を実装します。彼らは Haskell のアガニスト精神ですか?

class BooleanFunctionClass a where
  arity :: a -> Int

instance BooleanFunctionClass Bool where
  arity _ = 0

instance BooleanFunctionClass a => BooleanFunctionClass (Bool -> a) where
    arity f =  arity  (f True) + 1

data BooleanFunction = forall  a. (BooleanFunctionClass a) => BooleanFunction a String
instance Show BooleanFunction where
  show (BooleanFunction _ str) = show str

しかし、セレクター(n個の引数の関数、k番目を返す)を実装する方法がわかりません。欲しいselector :: Int -> Int -> BooleanFunction。助言がありますか?

PS。ごめん。MarkdownにTeXを挿入する方法がわかりません。

4

1 に答える 1

1

あなたが何を達成しようとしているのか正確にはわかりませんが、コンパイル時にアリティをチェックしたい場合は、おそらくリストは機能しません(コメントで提案したように)。

タプルなどが必要です。可変サイズのタプルを扱う最も良い方法は Template Haskell です。また、 TupleTHは、タイプ セーフな方法でタプルを処理することに関して、既に多くの作業を行っています。

于 2012-08-30T07:39:25.030 に答える