開発環境
- OS X Mavericks - Apple (OS)
- Dart Editor (開発環境)
- Dartium | Dart/ Structured web apps (ブラウザ, Dart VM 用 (Chromium with the Dart VM))
- Safari (ブラウザ, JavaScript 用)
- Dart (プログラミング言語)
Real World Haskell―実戦で学ぶ関数型言語プログラミング(Bryan O'Sullivan (著)、 John Goerzen (著)、 Don Stewart (著)、山下 伸夫 (翻訳)、伊東 勝利 (翻訳)、株式会社タイムインターメディア (翻訳)、オライリージャパン)の4章(関数プログラミング)、4.6(ループをどのように考えるか)、4.6.9(左畳み込み、遅延性、スペースリーク)、練習問題 7.をDartで考えてみる。
その他参考書籍
- What is Dart? [Kindle版] (O'Reilly Media) Kathy Walrath Seth Ladd (著) このブログでの感想
練習問題 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 コメント:
コメントを投稿