Преамбула
Также поддерживал библиотеки расширений на C++, например, все базовые типа вроде int,float,string,array – не встроенные, а написаны в виде расширений. Еще язык поддерживает изменяемую грамматику т.е. тип расширения может не только переопределять операторы, но и вводить новые, описав их тип.
Ниже пару примеров (внешний класс массива и qsort):
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67
|
class qsort { function partition(array a,int left,int right,int pivotIndex) returns int; { int pivotValue = (int)a[pivotIndex]; int t1 = (int)a[right]; int t2 = (int)a[pivotIndex]; a.setValue(right,t2); a.setValue(pivotIndex,t1);
int storeIndex = left; int i = left; while (i<right) { t1 = (int)a[i]; if (t1<pivotValue) { t2 = (int)a[storeIndex]; a.setValue(i,t2); a.setValue(storeIndex,t1); storeIndex+=1; } i+=1; } t1 = (int)a[storeIndex]; t2 = (int)a[right]; a.setValue(storeIndex,t2); a.setValue(right,t1); return storeIndex; } function sort(array a,int left,int right) returns int; { int pivotIndex = left+right; pivotIndex = pivotIndex/2; int pni,v1,v2; if (right>left) { pni = partition(a,left,right,pivotIndex); v1 = pni-1; v1 = sort(a,left,v1); v2 = pni+1; v2 = sort(a,v2,right); } return 0; } function Main(); { array A; int n.read(); A.setSize(n,typeof(int)); int i = 0; while (i<n) { ((int)A[i]).read(); i+=1; } sort(A,0,n-1); i=0; while (i<n) { ((int)A[i]).write(); i+=1; } } }
|