2014年1月25日土曜日

開発環境

Real World Haskell―実戦で学ぶ関数型言語プログラミング(Bryan O'Sullivan (著)、 John Goerzen (著)、 Don Stewart (著)、山下 伸夫 (翻訳)、伊東 勝利 (翻訳)、株式会社タイムインターメディア (翻訳)、オライリージャパン)の4章(関数プログラミング)、4.5(リストを使う)、練習問題 2.をDartで考えてみる。

その他参考書籍

練習問題 2.

コード

sample.dart

import 'dart:html';

void main(){
  run.onClick.listen((MouseEvent event){
    pre.text = window.navigator.userAgent + '\n';
    for(List sequence in sequences){
      pre.text += '$sequence\n';
      pre.text += '${splitWith((int n) => n.isEven, sequence)}\n';
    }
  });
  clear.onClick.listen((MouseEvent event) => pre.text = '');
}

ButtonElement run = querySelector('#run_dart');
ButtonElement clear = querySelector('#clear');
PreElement pre = querySelector('#pre0');

List<List> sequences = [[1, 2, 4],
                        [1, 2, 4, 5],
                        [2, 4, 1, 3],
                        [1, 3, 2, 4, 5, 7],
                        [2, 4, 1, 3, 6, 8],
                        [1],
                        [2],
                        []];

List<List> splitWith(bool f(var a), List sequence){
  List<List> result = [];
  List temp = [];
  for(var x in sequence){
    if(f(x)){
      temp.add(x);
    } else {
      if(temp.isNotEmpty){
        result.add(temp);
        temp = [];
      }
    }
  }
  if(temp.isNotEmpty){
    result.add(temp);
  }
  return result;
}














						

0 コメント:

コメントを投稿