2014年1月20日月曜日

開発環境

Real World Haskell―実戦で学ぶ関数型言語プログラミング(Bryan O'Sullivan (著)、 John Goerzen (著)、 Don Stewart (著)、山下 伸夫 (翻訳)、伊東 勝利 (翻訳)、株式会社タイムインターメディア (翻訳)、オライリージャパン)の3章(型を定義し、関数を単純化する)、3.13(ガードの条件節の評価)、練習問題8.をDartで解いてみる。

その他参考書籍

練習問題8.

コード

sample.dart

import 'dart:html';

void main(){
  Tree tree1 = new Tree(null, null, null);
  var tree2 = new Tree("x", null, null);
  var tree3 = new Tree("x",
      null,
      new Tree("y", null, null));
  List<Tree> trees = [tree1, tree2, tree3];
  run.onClick.listen((MouseEvent event){
    pre.text = window.navigator.userAgent + '\n';
    for(var tree in trees){
      pre.text += '$tree 高さ: ${tree.height()}\n';
    }
  });
  clear.onClick.listen((MouseEvent event) => pre.text = '');
}

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

class Tree{
  var a;
  Tree left;
  Tree right;
  Tree(this.a, this.left, this.right);
  int height(){
    if(a == null){
      return 0;
    }
    if(left == null && right == null){
      return 1;
    }
    if(left == null){
      return 1 + right.height();
    }
    if(right == null){
      return 1 + left.height();
    }
    return 1 + (left.height() > right.height() ? 
        left.height() : right.height());
  }
  String toString(){
    if(a == null){
      return "Empty";
    }
    return 'Node $a ($left) ($right)';
  }
}















						

0 コメント:

コメントを投稿