さまざまな種類のカテゴリを含むレコードを作成しましたが、これにより GF が巨大なgfo
ファイル (150Mb) を生成したり、10 分以上コンパイルした後に一部の言語で壊れたりすることさえありました。私のレコードには 9 つの要素 (8 つの異なるカテゴリ) しか含まれていません。
次の小さな例を見てみましょう。GF を使用して自己紹介テキストを作成したいとします。このようなテキストを生成するために、レコードを作成し、それに Person という名前を付けました。Person レコードには、名前、年齢、住所、趣味、人間の特徴などのさまざまな情報が含まれます。この小さなレコードを作成するだけで、GF は 1.28 MB のgfo
ファイルを生成し、コンパイルに 1 秒以上かかります。
これが私のコードです
アブストラクト:test.gf
abstract Test = {
flags
startcat = Sentence;
cat
Sentence; Human;
fun
MySentence : Human -> Sentence;
Joan : Human;
}
コンクリート:TestSpa.gf
concrete TestSpa of Test = open SyntaxSpa, ParadigmsSpa, Predef, DictSpa in{
lincat
Sentence = Text;
Human = Person;
lin
MySentence person = generateIntro person;
Joan = {name = "Joan" ; det = aSg_Det ; job = mkN ("Doctor") ; age = mkNumeral("22") ; hobby = bailar_V ; lastMeal = mkV2(hablar_V) ;
food = mkN ("spaghetti") ; prep = mkPrep ("at") ; location = mkN("resturant") ; meal = Lunch ; feeling = mkA("happy")};
oper
Person : Type = {name : Str ;
det : Det;
job : N ;
age : Numeral ;
hobby : V ;
lastMeal : V2 ;
food : N;
prep : Prep;
location : N;
meal : Meal;
feeling : A};
generateIntro : Person -> Text =
\per -> mkText (mkUtt (mkNP (mkDet(i_Pron)) (per.job)));
param
Meal = Breakfast | Lunch | Dinner;
}
いくつかのカテゴリを 1 つのレコードにまとめて追加すると、ランタイムが長くなる原因となりますが、他のカテゴリはそれほど影響しないことに気付きました。
質問:
1-レコードを使用して異なるカテゴリ値をまとめて保持する以外に、抽象の依存型を使用しない方法はありますか?
2- この問題を解決し、レコード内のこれらの値がすべて必要であることを認識して GF を高速に実行する方法はありますが、すべての文に表示されるわけではありませんか?