我想在mathematica中創建一個模塊,該模塊在自動機是確定性或非確定性時返回。 我在考慮如果有兩個轉換開始於相同的狀態並讀取相同的符號或者如果存在空的轉換,則自動機不是確定性的。數學確定自動機
欲調試代碼,但我不能:
isDeterministic[au_] := Module[{a, s},
For[i = 1, i <= Length[au[[3]]],
a = au[[3]][[i]][[1]];
s = au[[3]][[i]][[2]];
If[s == {}, Return[False]];
For[j = i, j <= Length[au[[3]]],
If[a == au[[3]][[j]][[1]] && s == au[[3]][[j]][[2]],
Return[False]];
j++;
];
i++;
];
Return[True];
]
A = {{1, 2},
{a, b},
{{1, a, 2}, {2, b, 1}},
1,
{2}
}
isDeterministic[A]
A是自動機,其中所述第一元件是所述狀態的列表,第二個是字母,第三是過渡,第四是初始狀態,第五個是最終狀態的列表。
主要問題是,當我將函數應用於A時,它永遠不會結束。
編輯: 解決
這是最終代碼:
isDeterministic[au_] :=
Module[{a, s, lambda},
For[i = 1, i <= Length[au[[3]]], i++, a = au[[3]][[i]][[1]];
s = au[[3]][[i]][[2]];
If[s == lambda, Return[False]];
For[j = i + 1, j <= Length[au[[3]]], j++,
If[a == au[[3]][[j]][[1]] && s == au[[3]][[j]][[2]],
Return[False]]]];
True]
A = {{1, 2},
{a, b},
{{2, b, 1}, {1, a, 2}},
1,
{2}
}
isDeterministic[A]
True
感謝您的回答!現在沒有無限循環,但它顯示False時,它應該顯示爲真 – user1754322
好吧,非常感謝你的民間。最後,我解決了邏輯部分只是添加1到j。我將編輯以顯示最終代碼。 Module中的大寫字母是我難以發現的一個錯誤。 – user1754322