fork download
  1. extension FunctionComposition<C, B> on C Function(B) {
  2. C Function(A) compose<A>(B Function(A) g) {
  3. return (A a) => this(g(a));
  4. }
  5. }
  6. extension IterableExtension<E> on Iterable<E> {
  7. Iterable<R> mapIndexed<R>(R Function(int index, E element) convert) sync* {
  8. for (var index = 0; index < length; index++) {
  9. yield convert(index, elementAt(index));
  10. }
  11. }
  12. List<E> sorted(Comparator<E> compare) => [...this]..sort(compare);
  13. List<E> sortedBy<K extends Comparable>(K Function(E element) keyOf) => sorted((a, b) => keyOf(a).compareTo(keyOf(b)));
  14. }
  15. void main () {
  16. var sorti = (List<Comparable> xs) => xs.mapIndexed((i, x) => (x, i)).sortedBy((xi) => xi.$1).map((xi) => xi.$2).toList();
  17. var f = sorti.compose(sorti);
  18. var g = print.compose(f);
  19. g([1,100,10,10000,1000]);
  20. g([3,1,4,1,5,9,2]);
  21. g([0,1,0,1,0,1,0,1]);
  22. g(["A","C","B","E","D"]);
  23. }
  24. /*
  25. 拡張メソッドはDart2.7から。
  26. ideone現状はDart (dart 2.3.0)。
  27. 以下dartpad.devでの実行結果。
  28. [0, 2, 1, 4, 3]
  29. [3, 0, 4, 1, 5, 6, 2]
  30. [0, 4, 1, 5, 2, 6, 3, 7]
  31. [0, 2, 1, 4, 3]
  32. */
  33.  
Runtime error #stdin #stdout #stderr 1.36s 151408KB
stdin
Standard input is empty
stdout
Standard output is empty
stderr
prog.dart:1:11: Error: A function declaration needs an explicit list of parameters.
Try adding a parameter list to the function declaration.
extension FunctionComposition<C, B> on C Function(B) {
          ^^^^^^^^^^^^^^^^^^^
prog.dart:1:37: Error: Expected '{' before this.
extension FunctionComposition<C, B> on C Function(B) {
                                    ^^
prog.dart:1:40: Error: Expected ';' after this.
extension FunctionComposition<C, B> on C Function(B) {
                                       ^
prog.dart:6:11: Error: A function declaration needs an explicit list of parameters.
Try adding a parameter list to the function declaration.
extension IterableExtension<E> on Iterable<E> {
          ^^^^^^^^^^^^^^^^^
prog.dart:6:32: Error: Expected '{' before this.
extension IterableExtension<E> on Iterable<E> {
                               ^^
prog.dart:6:35: Error: A function declaration needs an explicit list of parameters.
Try adding a parameter list to the function declaration.
extension IterableExtension<E> on Iterable<E> {
                                  ^^^^^^^^
prog.dart:1:1: Error: Type 'extension' not found.
extension FunctionComposition<C, B> on C Function(B) {
^^^^^^^^^
prog.dart:1:37: Error: Type 'on' not found.
extension FunctionComposition<C, B> on C Function(B) {
                                    ^^
prog.dart:6:1: Error: Type 'extension' not found.
extension IterableExtension<E> on Iterable<E> {
^^^^^^^^^
prog.dart:6:32: Error: Type 'on' not found.
extension IterableExtension<E> on Iterable<E> {
                               ^^