322 | betapply (f,u) = f$u; |
322 | betapply (f,u) = f$u; |
323 |
323 |
324 (** Equality, membership and insertion of indexnames (string*ints) **) |
324 (** Equality, membership and insertion of indexnames (string*ints) **) |
325 |
325 |
326 (*optimized equality test for indexnames. Yields a huge gain under Poly/ML*) |
326 (*optimized equality test for indexnames. Yields a huge gain under Poly/ML*) |
327 fun eq_ix ((a:string, i:int), (a',i')) = (a=a') andalso i=i'; |
327 fun eq_ix ((a, i):indexname, (a',i'):indexname) = (a=a') andalso i=i'; |
328 |
328 |
329 (*membership in a list, optimized version for indexnames*) |
329 (*membership in a list, optimized version for indexnames*) |
330 fun mem_ix (x:string*int, []) = false |
330 fun mem_ix (_, []) = false |
331 | mem_ix (x, y :: ys) = eq_ix(x,y) orelse mem_ix (x, ys); |
331 | mem_ix (x, y :: ys) = eq_ix(x,y) orelse mem_ix (x, ys); |
332 |
332 |
333 (*insertion into list, optimized version for indexnames*) |
333 (*insertion into list, optimized version for indexnames*) |
334 fun ins_ix (x,xs) = if mem_ix (x, xs) then xs else x :: xs; |
334 fun ins_ix (x,xs) = if mem_ix (x, xs) then xs else x :: xs; |
335 |
335 |