2014年2月2日日曜日

開発環境

Real World Haskell―実戦で学ぶ関数型言語プログラミング(Bryan O'Sullivan (著)、 John Goerzen (著)、 Don Stewart (著)、山下 伸夫 (翻訳)、伊東 勝利 (翻訳)、株式会社タイムインターメディア (翻訳)、オライリージャパン)の4章(関数プログラミング)、4.6(ループをどのように考えるか)、4.6.9(左畳み込み、遅延性、スペースリーク)、練習問題 7.をDartで考えてみる。

その他参考書籍

練習問題 7.

コード

sample.dart

import 'dart:html';

void main(){
  run.onClick.listen((MouseEvent event){
    pre.text = window.navigator.userAgent + '\n';
    pre.text += '関数any(とList classのany method)\n';
    for (var sequence in sequences1){
      pre.text += 'sequence: $sequence\n';
      pre.text += '${any((int a) => a.isOdd, sequence)}\n';
      pre.text += '${sequence.any((int a) => a.isOdd)}\n';
    }
    pre.text += '関数words\n';
    for (String s in sequences2) {
      pre.text += 'String: \'$s\'\n';
      pre.text += '${words(s)}\n';
    }
    pre.text += '関数unlines\n';
    for (List<String> sequence in sequences3) {
      pre.text += 'lines: $sequence\n';
      pre.text += '${unlines(sequence)}\n';
    }
    pre.text += 'テスト終了';
  });
  clear.onClick.listen((MouseEvent event) => pre.text = '');
}

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

bool any(bool f(var a), List sequence){
  return sequence.fold(false,
      (bool previous, var element) => previous || f(element));
}

List<String> words(String s){
  List<String> temp = s.split('');
  List inner(List sequence, String ch){
    String a = sequence[0];
    List<String> b = sequence[1];
    if (ch == ' ' || ch == '\t'){
      if (a.isEmpty){
        return ['', b];
      }
      b.add(a);
      return ['', b];
    }
    return ['$a$ch', b];
  }
  List temp1 = temp.fold(['', []], inner);
  String a = temp1[0];
  List<String> b = temp1[1];
  if(a.isEmpty){
    return b;
  }
  b.add(a);
  return b;
}

String unlines(List<String> sequences){
  return sequences.fold('',
      (String previous, String next) => '$previous$next\n');
}

List<List> sequences1 = [[], [1], [2], [1,2,3,4], [4,3,2,1]];
List<List> sequences2 = ["", " ", "kamimura haskell", " kamimura \t haskell "];
List<List> sequences3 = [[], ["a"], [""], ["a", "bc", "def", "", "ghcij", " "]];














						

0 コメント:

コメントを投稿