2014年1月22日水曜日

開発環境

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

その他参考書籍

練習問題 11.

コード

sample.dart

import 'dart:html';

void main(){
  run.onClick.listen((MouseEvent){
    pre.text = window.navigator.userAgent + '\n';
    for(var points in [[a, b, c, d, e], [a, b, c, d, new Point(3, 1)], [a, b]]){
      points.forEach((Point p) => pre.text += '(${p.x}, ${p.y}) ');
      pre.text += '\n';
      pre.text += '${getDirections(points)}\n';
    }
  });
  clear.onClick.listen((MouseEvent event) => pre.text = '');
}

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

var a = new Point(0, 0);
var b = new Point(1, 0);
var c = new Point(1, 1);
var d = new Point(2, 1);
var e = new Point(2, 0);

List<Direction> getDirections(List<Point> points){
  if(points.length < 3){
    return [];
  }
  var result = [];
  result.add(new Direction(points[0], points[1], points[2]));
  result.addAll(getDirections(points.sublist(1)));
  return result;
}

class Point{
  num x;
  num y;
  Point(this.x, this.y);
}

class Direction{
  var direction;
  Direction(Point a, Point b, Point c){
    var cow = (b.x - a.x) * (c.y - a.y) - (b.y - a.y) * (c.x - a.x);
    direction = cow < 0 ?
        'Clockwise' : cow > 0 ?
            'Counterclockwise' : 'Collinear';
  }
  String toString(){
    return direction;
  }
}















						

0 コメント:

コメントを投稿