2014年1月30日木曜日

開発環境

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

その他参考書籍

練習問題 4.

コード

sample.dart

import 'dart:html';

void main(){
  run.onClick.listen((MouseEvent event){
    for(List sequence in sequences){
      pre.text += '$sequence\n${concat(sequence)}\n';
    }
  });
  clear.onClick.listen((MouseEvent event) => pre.text = '');
}

ButtonElement run = querySelector('#run_dart');
ButtonElement clear = querySelector('#clear');
PreElement pre = querySelector('#pre0');
List concat(List<List> sequences){
  return sequences.fold([],
      (List previous, List sequence){
    previous.addAll(sequence);
    return previous;
  });
}

List<List> sequences = [[], [[]], [[1, 2]], [[1, 2], [3, 4]]];


最後の[[1, 2], [3, 4]]の結果から、DartのList classのfoldは左畳み込みみたい。

0 コメント:

コメントを投稿