あなたが直接求めていることは、単に実行することはできません。与えられた
:- type question
---> truth(string, bool)
; blank(string, string)
; multiple(string, string, list(string)).
追加の種類の質問は、このタイプが定義されている場所で拡張し、モジュールを再コンパイルすることによってのみ追加できます。以前の決定論的なコードのように、他の多くの変更も加えます。
answer(truth(_, yes)) = "true".
answer(truth(_, no)) = "false".
answer(blank(_, A)) = A.
answer(multiple(_, A, _)) = A.
新しい質問タイプを指定すると失敗します。「すべて正しい答えを選ぶ」タイプの質問の追加を反映するようにプログラムを更新できなかった場所をコンパイル時に通知されることは、質問タイプが存在する理由の良い部分です。[["Are foxes pretty?", "true"], ["Green foxes are ____", "adorable!", "fake", "evidence of animal cruelty"]]
問題バンクの文字列のリストを言う代わりに。
あなたが求めることはできません。しかし、実際にやりたいこと、つまり「型の可変数」が役に立つと思っていた目的は、別の方法で実現できるはずです。あなたの質問からなぜこれをやりたかったのか分からないので、それがどのような方法なのかわかりません。おそらく、言語リファレンスで識別された共用体または型クラスを読むことで利益が得られるでしょう。