好的,所以我在MAPLE软件上创建了这段代码,我需要将代码转换为sql语言(在oracle上)。如果你们中的任何人可以帮助我,或者甚至只是指出一些应用程序,网站来实现这一点,我真的很感激。我有一张表,其中有列出的父母和他们各自的孩子,代码应该创建另一个表与阿姨,叔叔和他们的侄女。 继承人代码:
`use DocumentTools,Statistics,ListTools in
#Matrice=tabella
M:=Matrix([l,m]);
#nulla di importante, solo per la resa grafica
SetProperty('m',visibleRows,2);
SetProperty('m',visibleColumns,Count(m));
inta:=[];
for i from 1 to Count(m) do
inta:=[inta[],300];
end;
SetProperty('m',rowNames,["genitori","figli"]);
SetProperty('m',columnWidths, inta);
SetProperty('m',update);
#inizializzazione di liste
p:=[];
zii:=[];
nipoti:=[];
#m è una lista formata da sotto liste, per usare il comando del pacchetto(libreria) ListTools, Search, devo trasformarla in una lista unica
for j from 1 to Count(m) do
p:=[p[],op(m[j])];
end do;
#l è anche una lista di liste, dunque 2 cicli per selezionare ogni elemento
for k from 1 to Count(l) do
for K from 1 to Count(l[k]) do
#se un figlio è anche un genitore, allora in quella famiglia ci sono nipoti e ci possono essere zii. Controllo se un padre è anche figlio
s:=Search(l[k][K],p);
if s=0 then
else
#Se lo fosse individuo la lista che lo contiene in quelle dei figli
for jj from 1 to Count(m) do
num:=Search(p[s],m[jj]);
if num=0 then
else
lista_n:=[];
for cont from 1 to Count(m[jj]) do
if m[jj][cont]=p[s] then
#Tramite l'if escludo dalla lista il genitore
else
lista_n:=[lista_n[],m[jj][cont]];
end if;
end do;
zii:=[zii[],lista_n];
end if;
end do;
#I nipoti sono in posizione uguale al genitore, ma nell'altra lista
nipoti:=[nipoti[],m[k]];
end if;
end; end;
#i succesivi for e if servono nel caso in cui ci siano zii da entrambi i genitori
for lol from 2 to Count(nipoti) do
if nipoti[lol]=nipoti[lol-1] then
#i nipoti comuni sono consecutivi poichè i genitori originali lo erano nella lista ordinata (spero che si capisca cosa voglio dire).
#Dunque inserisco una lista nell 'altra e elimina quella stessa lista ridifinendola e utilizzando un if e un for
zii[lol]:=[op(zii[lol]),op(zii[lol-1])];
zii[lol-1]:=[elimina];
else
end if;
Zii:=[];
for contatore from 1 to Count(zii) do
if zii[contatore]=[elimina] then
else
Zii:=[Zii[],zii[contatore]];
end if;
end;
end;
#Nulla di importante per il codice, apparte il comando MakeUnique che elimina i doppioni (dovrebbe essere superfluo ma non ho più testato).
inta1:=[];
for i from 1 to max([Count(zii),Count(nipoti)]) do
inta1:=[inta1[],300];
end;
DataTable:=Matrix([MakeUnique(Zii),MakeUnique(nipoti)]);
SetProperty('T',visibleColumns,max([Count(zii),Count(nipoti)]));
SetProperty('T',visibleRows,2);
SetProperty('T',columnWidths, inta1);
SetProperty('T',rowNames,["zii","nipoti"]);
SetProperty('T',update);
`
答案 0 :(得分:1)
将此代码翻译成完整的编程语言PL/SQL并不复杂,因此应该能够执行所有操作。您可以将其实现为存储过程,以后也可以从SQL语句访问它。
如果有一些数学构造,我建议使用Maple代码生成功能,生成某种不太特殊的语言(甚至C或FORTRAN都可以)的代码,这些代码以后可以手动转换为PL / SQL。但是,该代码似乎没有任何复杂的数学功能,而我显然会更完全地理解它是英语而不是意大利语的注释。