<?xml version="1.0" encoding="utf-8"?>
<rss version="2.0"><channel><title>Latest comments for language 'Smalltalk' on doukaku.org</title><link>http://ja.doukaku.org/lang/smalltalk/</link><description>Latest comments for language 'Smalltalk' on doukaku.org(long)</description><language>ja</language><lastBuildDate>Sat, 22 Nov 2008 20:39:15 -0000</lastBuildDate><item><title>sumim's comment on inline/embeded bytecode assembly
</title><link>http://ja.doukaku.org/comment/8037/</link><description>



&lt;a href="http://ja.doukaku.org/216/"&gt;inline/embeded bytecode assembly&lt;/a&gt;
(&lt;a href="http://ja.doukaku.org/216/nested/"&gt;Nested&lt;/a&gt; 
 &lt;a href="http://ja.doukaku.org/216/flatten/"&gt;Flatten&lt;/a&gt;)


&lt;hr&gt;
  &lt;p&gt;Squeak Smalltalk で。&lt;/p&gt;
&lt;p&gt;Smalltalk にはインラインでバイトコードを記述する機能はないので、代わりに通常 Smalltalk では表現できない C言語のスイッチ文（ラベルへのジャンプ）で書かれたDuff's deviceの動きを真似たメソッドを生成する操作を記述することにトライしてみました。&lt;/p&gt;
&lt;p&gt;まず元になるコード（そのままでは機能しない）をコンパイルしたメソッドを処理系に生成させ、そのバイト列に対しあらためて、やはり Smalltalk にはない（が、バイトコード命令にはある）ジャンプ命令である「A4 00」を挿入して呼び出しに用いる最終的なメソッド（バイトコード列）を再構成しました。&lt;/p&gt;
&lt;p&gt;ジャンプ命令「A4 00」の２バイト目は飛ぶ先（A4 の場合下流）を示します。「00」だと結果的にジャンプはせず次のバイトコードを実行するだけですが、このメソッドには実行時に与えられた配列のサイズによって自分のジャンプ先を動的に書き換える操作をあらかじめ加え、それによってお題のDuff's deviceの動きをシュミレートしています。&lt;/p&gt;
&lt;p&gt;組み上がったメソッドはクラスには属させず #valueWithReceiver:arguments: でレシーバを含めた引数を与えて静的に呼び出しています。実行後のコードの内容を末尾のコメントに示しました。各行は「先頭からのバイト数 &amp;lt;バイトコード&amp;gt; 操作内容」という書式になっています。&lt;/p&gt;

&lt;hr&gt;
  
    &lt;table&gt;&lt;tr&gt;&lt;td class="linenos"&gt;&lt;pre&gt; 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91&lt;/pre&gt;&lt;/td&gt;&lt;td class="code"&gt;&lt;div class="highlight"&gt;&lt;pre&gt;| code original modified src dst |
code := &amp;#39;copyFrom: src
    | idx mod |
    idx := src size.
    mod := idx negated \\ 4.
    thisContext method at: 50 put: mod * 11.
    [   self at: idx put: (src at: idx). idx := idx - 1.
        self at: idx put: (src at: idx). idx := idx - 1.
        self at: idx put: (src at: idx). idx := idx - 1.
        self at: idx put: (src at: idx). idx := idx - 1.
        idx &amp;gt; 0
    ] whileTrue&amp;#39;.

original := (Parser new parse: code class: WriteStream) generate asArray.
modified := ((original first: 48), #(16rA4 0), (original allButFirst: 48)).

src := 1 to: 10.
dst := Array new: src size.
(modified as: CompiledMethod) inspect; valueWithReceiver: dst arguments: {src}.
^dst   &amp;quot;=&amp;gt; #(1 2 3 4 5 6 7 8 9 10) &amp;quot;


&amp;quot;
33 &amp;lt;10&amp;gt; pushTemp: 0
34 &amp;lt;C2&amp;gt; send: size
35 &amp;lt;69&amp;gt; popIntoTemp: 1
36 &amp;lt;11&amp;gt; pushTemp: 1
37 &amp;lt;D0&amp;gt; send: negated
38 &amp;lt;21&amp;gt; pushConstant: 4
39 &amp;lt;BA&amp;gt; send: \\
40 &amp;lt;6A&amp;gt; popIntoTemp: 2
41 &amp;lt;89&amp;gt; pushThisContext: 
42 &amp;lt;D2&amp;gt; send: method
43 &amp;lt;23&amp;gt; pushConstant: 50
44 &amp;lt;12&amp;gt; pushTemp: 2
45 &amp;lt;24&amp;gt; pushConstant: 11
46 &amp;lt;B8&amp;gt; send: *
47 &amp;lt;C1&amp;gt; send: at:put:
48 &amp;lt;87&amp;gt; pop
49 &amp;lt;A4 16&amp;gt; jumpTo: 73   -- 追加されたジャンプ命令（ジャンプ先書き換え済み）
51 &amp;lt;70&amp;gt; self
52 &amp;lt;11&amp;gt; pushTemp: 1
53 &amp;lt;10&amp;gt; pushTemp: 0
54 &amp;lt;11&amp;gt; pushTemp: 1
55 &amp;lt;C0&amp;gt; send: at:
56 &amp;lt;C1&amp;gt; send: at:put:
57 &amp;lt;87&amp;gt; pop
58 &amp;lt;11&amp;gt; pushTemp: 1
59 &amp;lt;76&amp;gt; pushConstant: 1
60 &amp;lt;B1&amp;gt; send: -
61 &amp;lt;69&amp;gt; popIntoTemp: 1
62 &amp;lt;70&amp;gt; self
63 &amp;lt;11&amp;gt; pushTemp: 1
64 &amp;lt;10&amp;gt; pushTemp: 0
65 &amp;lt;11&amp;gt; pushTemp: 1
66 &amp;lt;C0&amp;gt; send: at:
67 &amp;lt;C1&amp;gt; send: at:put:
68 &amp;lt;87&amp;gt; pop
69 &amp;lt;11&amp;gt; pushTemp: 1
70 &amp;lt;76&amp;gt; pushConstant: 1
71 &amp;lt;B1&amp;gt; send: -
72 &amp;lt;69&amp;gt; popIntoTemp: 1
73 &amp;lt;70&amp;gt; self
74 &amp;lt;11&amp;gt; pushTemp: 1
75 &amp;lt;10&amp;gt; pushTemp: 0
76 &amp;lt;11&amp;gt; pushTemp: 1
77 &amp;lt;C0&amp;gt; send: at:
78 &amp;lt;C1&amp;gt; send: at:put:
79 &amp;lt;87&amp;gt; pop
80 &amp;lt;11&amp;gt; pushTemp: 1
81 &amp;lt;76&amp;gt; pushConstant: 1
82 &amp;lt;B1&amp;gt; send: -
83 &amp;lt;69&amp;gt; popIntoTemp: 1
84 &amp;lt;70&amp;gt; self
85 &amp;lt;11&amp;gt; pushTemp: 1
86 &amp;lt;10&amp;gt; pushTemp: 0
87 &amp;lt;11&amp;gt; pushTemp: 1
88 &amp;lt;C0&amp;gt; send: at:
89 &amp;lt;C1&amp;gt; send: at:put:
90 &amp;lt;87&amp;gt; pop
91 &amp;lt;11&amp;gt; pushTemp: 1
92 &amp;lt;76&amp;gt; pushConstant: 1
93 &amp;lt;B1&amp;gt; send: -
94 &amp;lt;69&amp;gt; popIntoTemp: 1
95 &amp;lt;11&amp;gt; pushTemp: 1
96 &amp;lt;75&amp;gt; pushConstant: 0
97 &amp;lt;B3&amp;gt; send: &amp;gt;
98 &amp;lt;99&amp;gt; jumpFalse: 101
99 &amp;lt;A3 CE&amp;gt; jumpTo: 51
101 &amp;lt;78&amp;gt; returnSelf
&amp;quot;
&lt;/pre&gt;&lt;/div&gt;
&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
    &lt;div align = "right" style="margin-right: 1em;"&gt;
      [&lt;a href="http://ja.doukaku.org/lang/smalltalk/"&gt;
      Smalltalk
      &lt;/a&gt;]
      [&lt;a href="http://ja.doukaku.org/comment/8037/download/"&gt;
      download code
      &lt;/a&gt;]
      &lt;/a&gt;]
    &lt;/div&gt;
    &lt;hr&gt;
  

</description><guid>http://ja.doukaku.org/comment/8037/</guid></item><item><title>sumim's comment on '('と')'の対応
</title><link>http://ja.doukaku.org/comment/7923/</link><description>



&lt;a href="http://ja.doukaku.org/214/"&gt;&amp;#39;(&amp;#39;と&amp;#39;)&amp;#39;の対応&lt;/a&gt;
(&lt;a href="http://ja.doukaku.org/214/nested/"&gt;Nested&lt;/a&gt; 
 &lt;a href="http://ja.doukaku.org/214/flatten/"&gt;Flatten&lt;/a&gt;)


&lt;hr&gt;
  &lt;p&gt;Squeak Smalltalk で。入力は in.txt を想定しています。&lt;/p&gt;

&lt;hr&gt;
  
    &lt;table&gt;&lt;tr&gt;&lt;td class="linenos"&gt;&lt;pre&gt; 1
 2
 3
 4
 5
 6
 7
 8
 9
10&lt;/pre&gt;&lt;/td&gt;&lt;td class="code"&gt;&lt;div class="highlight"&gt;&lt;pre&gt;| stream count |
stream := FileStream fileNamed: &amp;#39;in.txt&amp;#39;.
count := 0.

[stream atEnd] whileFalse: [
    stream next asciiValue caseOf: {
        [40] -&amp;gt; [count := count + 1].
        [41] -&amp;gt; [count := count - 1. count &amp;lt; 0 ifTrue: [^false]]
    } otherwise: []].
^count = 0
&lt;/pre&gt;&lt;/div&gt;
&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
    &lt;div align = "right" style="margin-right: 1em;"&gt;
      [&lt;a href="http://ja.doukaku.org/lang/smalltalk/"&gt;
      Smalltalk
      &lt;/a&gt;]
      [&lt;a href="http://ja.doukaku.org/comment/7923/download/"&gt;
      download code
      &lt;/a&gt;]
      &lt;/a&gt;]
    &lt;/div&gt;
    &lt;hr&gt;
  

</description><guid>http://ja.doukaku.org/comment/7923/</guid></item><item><title>sumim's comment on 疑似並行処理
</title><link>http://ja.doukaku.org/comment/7912/</link><description>



&lt;a href="http://ja.doukaku.org/215/"&gt;疑似並行処理&lt;/a&gt;
(&lt;a href="http://ja.doukaku.org/215/nested/"&gt;Nested&lt;/a&gt; 
 &lt;a href="http://ja.doukaku.org/215/flatten/"&gt;Flatten&lt;/a&gt;)


&lt;hr&gt;
  &lt;p&gt;数値（たとえば1から10）と、アルファベット（たとえばAからJまで）を順に出力する別々のループ処理を並行に実行させ、共通の出力先に出力する極力シンプルなコードを書いてください。&lt;/p&gt;
&lt;p&gt;念のため、実行後、出力先に数値とアルファベットが混ざって出力されている（たとえば、数値がすべて出力されてからアルファベットが続く…というふうになっていない）ことを確認してください。混ざってさえいれば、それぞれ１文字ずつ交互である必要はありませんし、もちろん交互でも構いません。&lt;/p&gt;
&lt;p&gt;出力先や出力方法は自由です。標準出力、テキストファイル、コンテナオブジェクト（配列、リスト、コレクション）など使いやすいもので構いません。&lt;/p&gt;
&lt;p&gt;例として Squeak Smalltalk でのコードと結果を示します。シンプルなコードなので Smalltalk に馴染みがない人も、おおよその内容は掴めると思います。&lt;/p&gt;

&lt;hr&gt;
  
    &lt;table&gt;&lt;tr&gt;&lt;td class="linenos"&gt;&lt;pre&gt;1
2
3
4
5
6
7&lt;/pre&gt;&lt;/td&gt;&lt;td class="code"&gt;&lt;div class="highlight"&gt;&lt;pre&gt;| out |
out := OrderedCollection new.

[(1 to: 10) do: [:each | out add: each. Processor yield]] fork.
[($A to: $J) do: [:each | out add: each. Processor yield]] forkAndWait.

^out asArray  &amp;quot;=&amp;gt; #(1 $A 2 $B 3 $C 4 $D 5 $E 6 $F 7 $G 8 $H 9 $I 10 $J) &amp;quot;
&lt;/pre&gt;&lt;/div&gt;
&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
    &lt;div align = "right" style="margin-right: 1em;"&gt;
      [&lt;a href="http://ja.doukaku.org/lang/smalltalk/"&gt;
      Smalltalk
      &lt;/a&gt;]
      [&lt;a href="http://ja.doukaku.org/comment/7912/download/"&gt;
      download code
      &lt;/a&gt;]
      &lt;/a&gt;]
    &lt;/div&gt;
    &lt;hr&gt;
  

</description><guid>http://ja.doukaku.org/comment/7912/</guid></item><item><title>sumim's comment on 世界時計
</title><link>http://ja.doukaku.org/comment/7903/</link><description>



&lt;a href="http://ja.doukaku.org/213/"&gt;世界時計&lt;/a&gt;
(&lt;a href="http://ja.doukaku.org/213/nested/"&gt;Nested&lt;/a&gt; 
 &lt;a href="http://ja.doukaku.org/213/flatten/"&gt;Flatten&lt;/a&gt;)


&lt;hr&gt;
  &lt;p&gt;Squeak Smalltalk で。&lt;/p&gt;

&lt;hr&gt;
  
    &lt;table&gt;&lt;tr&gt;&lt;td class="linenos"&gt;&lt;pre&gt;1
2
3
4&lt;/pre&gt;&lt;/td&gt;&lt;td class="code"&gt;&lt;div class="highlight"&gt;&lt;pre&gt;DateAndTime now         &amp;quot;=&amp;gt; 2008-10-30T17:52:12+09:00 &amp;quot;
DateAndTime now asUTC   &amp;quot;=&amp;gt; 2008-10-30T08:52:17+00:00 &amp;quot;
DateAndTime now offset: (TimeZone timeZones detect: [:tz | tz abbreviation = &amp;#39;PST&amp;#39;]) offset
                        &amp;quot;=&amp;gt; 2008-10-30T17:53:23-08:00 &amp;quot;
&lt;/pre&gt;&lt;/div&gt;
&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
    &lt;div align = "right" style="margin-right: 1em;"&gt;
      [&lt;a href="http://ja.doukaku.org/lang/smalltalk/"&gt;
      Smalltalk
      &lt;/a&gt;]
      [&lt;a href="http://ja.doukaku.org/comment/7903/download/"&gt;
      download code
      &lt;/a&gt;]
      &lt;/a&gt;]
    &lt;/div&gt;
    &lt;hr&gt;
  

</description><guid>http://ja.doukaku.org/comment/7903/</guid></item><item><title>sumim's comment on 漢数字で九九の表
</title><link>http://ja.doukaku.org/comment/7822/</link><description>



&lt;a href="http://ja.doukaku.org/212/"&gt;漢数字で九九の表&lt;/a&gt;
(&lt;a href="http://ja.doukaku.org/212/nested/"&gt;Nested&lt;/a&gt; 
 &lt;a href="http://ja.doukaku.org/212/flatten/"&gt;Flatten&lt;/a&gt;)


&lt;hr&gt;
  &lt;p&gt;Squeak Smalltalk で。&lt;/p&gt;

&lt;hr&gt;
  
    &lt;table&gt;&lt;tr&gt;&lt;td class="linenos"&gt;&lt;pre&gt; 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13&lt;/pre&gt;&lt;/td&gt;&lt;td class="code"&gt;&lt;div class="highlight"&gt;&lt;pre&gt;| 漢数字 数字 スペーサ |
漢数字 := {&amp;#39;&amp;#39; size asHexDigit -&amp;gt; $○} as: Dictionary.
&amp;#39;一二三四五六七八九&amp;#39; doWithIndex: [:各々 :値 | 漢数字 at: 値 asHexDigit put: 各々].
World findATranscript: nil.
数字 := 漢数字 keysSortedSafely allButFirst.
スペーサ := &amp;#39;　　&amp;#39;.
数字 do: [:左値 |
    Transcript cr.
    数字 do: [:右値 |
        | 積 |
        積 := 左値 asString * 右値 asString collect: [:各々 | 漢数字 at: 各々].
        Transcript nextPutAll: &amp;#39;　&amp;#39;, (スペーサ, 積 last: スペーサ size)]].
Transcript endEntry
&lt;/pre&gt;&lt;/div&gt;
&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
    &lt;div align = "right" style="margin-right: 1em;"&gt;
      [&lt;a href="http://ja.doukaku.org/lang/smalltalk/"&gt;
      Smalltalk
      &lt;/a&gt;]
      [&lt;a href="http://ja.doukaku.org/comment/7822/download/"&gt;
      download code
      &lt;/a&gt;]
      &lt;/a&gt;]
    &lt;/div&gt;
    &lt;hr&gt;
  

</description><guid>http://ja.doukaku.org/comment/7822/</guid></item><item><title>sumim's comment on デバッグ用出力
</title><link>http://ja.doukaku.org/comment/7819/</link><description>



&lt;a href="http://ja.doukaku.org/211/"&gt;デバッグ用出力&lt;/a&gt;
(&lt;a href="http://ja.doukaku.org/211/nested/"&gt;Nested&lt;/a&gt; 
 &lt;a href="http://ja.doukaku.org/211/flatten/"&gt;Flatten&lt;/a&gt;)


&lt;hr&gt;
  &lt;p&gt;Squeak Smalltalk では、適当なオブジェクトに halt というメッセージを送ると、コールスタック一覧を伴ったノーティファイアと呼ばれるウインドウが表示され、そこからデバッガを起動できます。&lt;/p&gt;
&lt;p&gt;一般に Smalltalk では実行中コンテキスト（スタックフレーム）もオブジェクトで、デバッガはこのコンテキストを行き来したりステップ実行したり、内容（インスタンス変数一覧、ローカル変数一覧）を見たり変更したりする専用のアプリケーションとして機能します。&lt;/p&gt;
&lt;p&gt;さらに詳しくは、手前味噌で恐縮ですが次の記事で。&lt;/p&gt;

&lt;hr&gt;
  
    &lt;table&gt;&lt;tr&gt;&lt;td class="linenos"&gt;&lt;pre&gt;1&lt;/pre&gt;&lt;/td&gt;&lt;td class="code"&gt;&lt;div class="highlight"&gt;&lt;pre&gt;self halt
&lt;/pre&gt;&lt;/div&gt;
&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
    &lt;div align = "right" style="margin-right: 1em;"&gt;
      [&lt;a href="http://ja.doukaku.org/lang/smalltalk/"&gt;
      Smalltalk
      &lt;/a&gt;]
      [&lt;a href="http://ja.doukaku.org/comment/7819/download/"&gt;
      download code
      &lt;/a&gt;]
      &lt;/a&gt;]
    &lt;/div&gt;
    &lt;hr&gt;
  

</description><guid>http://ja.doukaku.org/comment/7819/</guid></item><item><title>sumim's comment on π
</title><link>http://ja.doukaku.org/comment/7772/</link><description>



&lt;a href="http://ja.doukaku.org/210/"&gt;π&lt;/a&gt;
(&lt;a href="http://ja.doukaku.org/210/nested/"&gt;Nested&lt;/a&gt; 
 &lt;a href="http://ja.doukaku.org/210/flatten/"&gt;Flatten&lt;/a&gt;)


&lt;hr&gt;
  &lt;p&gt;Squeak Smalltalk で。&lt;/p&gt;

&lt;hr&gt;
  
    &lt;table&gt;&lt;tr&gt;&lt;td class="linenos"&gt;&lt;pre&gt;1
2
3
4
5
6
7&lt;/pre&gt;&lt;/td&gt;&lt;td class="code"&gt;&lt;div class="highlight"&gt;&lt;pre&gt;| pi n next |
pi := 0.0.
n := 0.
[   next := 6 * (2 * n) factorial 
        / ((2 raisedTo: 4 * n + 1) * n factorial squared * (2 * n + 1)).
    next &amp;lt; 1e-16] whileFalse: [pi := pi + next. n := n + 1].
^pi   &amp;quot;=&amp;gt; 3.141592653589793 &amp;quot;
&lt;/pre&gt;&lt;/div&gt;
&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
    &lt;div align = "right" style="margin-right: 1em;"&gt;
      [&lt;a href="http://ja.doukaku.org/lang/smalltalk/"&gt;
      Smalltalk
      &lt;/a&gt;]
      [&lt;a href="http://ja.doukaku.org/comment/7772/download/"&gt;
      download code
      &lt;/a&gt;]
      &lt;/a&gt;]
    &lt;/div&gt;
    &lt;hr&gt;
  

</description><guid>http://ja.doukaku.org/comment/7772/</guid></item><item><title>sumim's comment on タブ区切りデータの処理
</title><link>http://ja.doukaku.org/comment/7732/</link><description>



&lt;a href="http://ja.doukaku.org/209/"&gt;タブ区切りデータの処理&lt;/a&gt;
(&lt;a href="http://ja.doukaku.org/209/nested/"&gt;Nested&lt;/a&gt; 
 &lt;a href="http://ja.doukaku.org/209/flatten/"&gt;Flatten&lt;/a&gt;)


&lt;hr&gt;
  &lt;p&gt;Squeak Smalltalk で。&lt;/p&gt;

&lt;hr&gt;
  
    &lt;table&gt;&lt;tr&gt;&lt;td class="linenos"&gt;&lt;pre&gt; 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37&lt;/pre&gt;&lt;/td&gt;&lt;td class="code"&gt;&lt;div class="highlight"&gt;&lt;pre&gt;| data cr numRows numCols table rIdx labels rows |
data := &amp;#39;ID    Surname    Forename    Age
1    Sato    Hanako    17
0    Suzuki    Taro    18
3    Ozawa    Ichiro    66
2    Asoh    Taro    68&amp;#39;.

cr := Character cr.
numRows := (data occurrencesOf: cr) + 1.
numCols := ((data upTo: cr) occurrencesOf: Character tab) + 1.
table := Matrix rows: numRows columns: numCols.
rIdx := 0.
data linesDo: [:line |
    | cIdx |
    rIdx := rIdx + 1.
    cIdx := 0.
    line tabDelimitedFieldsDo: [:each | table at: rIdx at: (cIdx := cIdx + 1) put: each]].

labels := table atRow: 1.
table atColumn: 4 put: (table atColumn: 4) + 1.
table atRow: 1 put: labels.
table swapColumn: 2 withColumn: 3.
labels := table atRow: 1.
rows := (2 to: table rowCount) collect: [:idx | table atRow: idx].
rows sort: [:a :b | a first &amp;lt; b first].

World findATranscript: nil.
{labels}, rows do: [:each |
    Transcript cr.
    each do: [:elem | Transcript show: elem] separatedBy: [Transcript tab]]

&amp;quot;=&amp;gt;
ID  Forename  Surname  Age
0   Taro      Suzuki   19
1   Hanako    Sato     18
2   Taro      Asoh     69
3   Ichiro    Ozawa    67  &amp;quot;
&lt;/pre&gt;&lt;/div&gt;
&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
    &lt;div align = "right" style="margin-right: 1em;"&gt;
      [&lt;a href="http://ja.doukaku.org/lang/smalltalk/"&gt;
      Smalltalk
      &lt;/a&gt;]
      [&lt;a href="http://ja.doukaku.org/comment/7732/download/"&gt;
      download code
      &lt;/a&gt;]
      &lt;/a&gt;]
    &lt;/div&gt;
    &lt;hr&gt;
  

</description><guid>http://ja.doukaku.org/comment/7732/</guid></item><item><title>sumim's comment on 数値リストの圧縮
</title><link>http://ja.doukaku.org/comment/7712/</link><description>



&lt;a href="http://ja.doukaku.org/208/"&gt;数値リストの圧縮&lt;/a&gt;
(&lt;a href="http://ja.doukaku.org/208/nested/"&gt;Nested&lt;/a&gt; 
 &lt;a href="http://ja.doukaku.org/208/flatten/"&gt;Flatten&lt;/a&gt;)


&lt;hr&gt;
  &lt;p&gt;Squeak Smalltalk で。&lt;/p&gt;

&lt;hr&gt;
  
    &lt;table&gt;&lt;tr&gt;&lt;td class="linenos"&gt;&lt;pre&gt; 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17&lt;/pre&gt;&lt;/td&gt;&lt;td class="code"&gt;&lt;div class="highlight"&gt;&lt;pre&gt;| in stream result |
in := #(1 3 4 5 6 12 13 15 20 25 26 27).
stream := in readStream.
result := OrderedCollection with: stream next.
[stream atEnd] whileFalse: [
    | next prev step |
    next := stream next.
    prev := result last.
    result add: ((prev isKindOf: Interval)
        ifTrue: [next - prev last = (step := prev increment)
            ifTrue: [result removeLast first to: next by: step] 
            ifFalse: [next]] 
        ifFalse: [stream peek ifNil: [next] ifNotNilDo: [:peek |
            next - prev = (step := peek - next)
                ifTrue: [result removeLast to: stream next by: step]
                ifFalse: [next]]])].
^result asArray   &amp;quot;=&amp;gt; {1 . (3 to: 6) . 12 . 13 . (15 to: 25 by: 5) . 26 . 27} &amp;quot;
&lt;/pre&gt;&lt;/div&gt;
&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
    &lt;div align = "right" style="margin-right: 1em;"&gt;
      [&lt;a href="http://ja.doukaku.org/lang/smalltalk/"&gt;
      Smalltalk
      &lt;/a&gt;]
      [&lt;a href="http://ja.doukaku.org/comment/7712/download/"&gt;
      download code
      &lt;/a&gt;]
      &lt;/a&gt;]
    &lt;/div&gt;
    &lt;hr&gt;
  

</description><guid>http://ja.doukaku.org/comment/7712/</guid></item><item><title>sumim's comment on 2^i * 3^j * 5^k なる整数
</title><link>http://ja.doukaku.org/comment/7644/</link><description>



&lt;a href="http://ja.doukaku.org/206/"&gt;2^i * 3^j * 5^k なる整数&lt;/a&gt;
(&lt;a href="http://ja.doukaku.org/206/nested/"&gt;Nested&lt;/a&gt; 
 &lt;a href="http://ja.doukaku.org/206/flatten/"&gt;Flatten&lt;/a&gt;)


&lt;hr&gt;
  &lt;p&gt;Squeak Smalltalk で。&lt;/p&gt;

&lt;hr&gt;
  
    &lt;table&gt;&lt;tr&gt;&lt;td class="linenos"&gt;&lt;pre&gt; 1
 2
 3
 4
 5
 6
 7
 8
 9
10&lt;/pre&gt;&lt;/td&gt;&lt;td class="code"&gt;&lt;div class="highlight"&gt;&lt;pre&gt;| count n |
count := 0.
n := 0.
World findATranscript: nil.
[n := n + 1. count &amp;lt; 100] whileTrue: [
    (#(2 3 5) inject: n into: [:quo :each |
            [quo isDivisibleBy: each] whileTrue: [quo := quo / each]. quo]) = 1
         ifTrue: [
            count := count + 1.
            Transcript cr; show: n]]
&lt;/pre&gt;&lt;/div&gt;
&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
    &lt;div align = "right" style="margin-right: 1em;"&gt;
      [&lt;a href="http://ja.doukaku.org/lang/smalltalk/"&gt;
      Smalltalk
      &lt;/a&gt;]
      [&lt;a href="http://ja.doukaku.org/comment/7644/download/"&gt;
      download code
      &lt;/a&gt;]
      &lt;/a&gt;]
    &lt;/div&gt;
    &lt;hr&gt;
  

</description><guid>http://ja.doukaku.org/comment/7644/</guid></item><item><title>sumim's comment on 起動オプションの解析
</title><link>http://ja.doukaku.org/comment/7607/</link><description>



&lt;a href="http://ja.doukaku.org/205/"&gt;起動オプションの解析&lt;/a&gt;
(&lt;a href="http://ja.doukaku.org/205/nested/"&gt;Nested&lt;/a&gt; 
 &lt;a href="http://ja.doukaku.org/205/flatten/"&gt;Flatten&lt;/a&gt;)


&lt;hr&gt;
  &lt;p&gt;Squeak Smalltalk で、http://ja.doukaku.org/comment/5013/ の方法で得た引数の配列を解析するものを書いてみました。&lt;/p&gt;

&lt;hr&gt;
  
    &lt;table&gt;&lt;tr&gt;&lt;td class="linenos"&gt;&lt;pre&gt; 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47&lt;/pre&gt;&lt;/td&gt;&lt;td class="code"&gt;&lt;div class="highlight"&gt;&lt;pre&gt;| cmdopt |

cmdopt := [:args |
    | output quote debug strings argsStream |
    output := false.
    quote := false.
    debug := 0.
    strings := OrderedCollection new.
    argsStream := args readStream.
    [argsStream atEnd] whileFalse: [
        | opt |
        opt := argsStream next.
        (opt first = $-) ifFalse: [strings add: opt] ifTrue: [
            | optStream nextOpt |
            optStream := opt allButFirst readStream.
            [(nextOpt := optStream next) notNil] whileTrue: [
                nextOpt caseOf: {
                    [$o] -&amp;gt; [output := true].
                    [$q] -&amp;gt; [quote := true].
                    [$d] -&amp;gt; [debug := Integer readFrom: (optStream atEnd
                        ifFalse: [optStream] ifTrue: [argsStream next readStream])]
                } otherwise: [^self error: &amp;#39;unknown option&amp;#39;]]]].
    output ifFalse: [^self error: &amp;#39;no output option&amp;#39;].
    strings ifEmpty: [^self error: &amp;#39;no string option&amp;#39;].
    {#output-&amp;gt;output. #quote-&amp;gt;quote. #debug-&amp;gt;debug. #strings-&amp;gt;strings asArray}].

World findATranscript: nil.
#(
    (&amp;#39;-o&amp;#39; &amp;#39;AAA&amp;#39;)
    (&amp;#39;-o&amp;#39; &amp;#39;AAA&amp;#39; &amp;#39;BBB&amp;#39; &amp;#39;CCC&amp;#39;)
    (&amp;#39;-oq&amp;#39; &amp;#39;AAA&amp;#39;)
    (&amp;#39;-o&amp;#39; &amp;#39;-q&amp;#39; &amp;#39;AAA&amp;#39;)
    (&amp;#39;-o&amp;#39; &amp;#39;-d1&amp;#39; &amp;#39;AAA&amp;#39;)
    (&amp;#39;-o&amp;#39; &amp;#39;-d&amp;#39; &amp;#39;1&amp;#39; &amp;#39;AAA&amp;#39;)
    (&amp;#39;-q&amp;#39; &amp;#39;-d2&amp;#39; &amp;#39;-o&amp;#39; &amp;#39;AAA&amp;#39;)
) do: [:args |
    Transcript cr; show: (cmdopt value: args)]

&amp;quot;=&amp;gt;
    {#output-&amp;gt;true . #quote-&amp;gt;false . #debug-&amp;gt;0 . #strings-&amp;gt;#(&amp;#39;AAA&amp;#39;)}
    {#output-&amp;gt;true . #quote-&amp;gt;false . #debug-&amp;gt;0 . #strings-&amp;gt;#(&amp;#39;AAA&amp;#39; &amp;#39;BBB&amp;#39; &amp;#39;CCC&amp;#39;)}
    {#output-&amp;gt;true . #quote-&amp;gt;true . #debug-&amp;gt;0 . #strings-&amp;gt;#(&amp;#39;AAA&amp;#39;)}
    {#output-&amp;gt;true . #quote-&amp;gt;true . #debug-&amp;gt;0 . #strings-&amp;gt;#(&amp;#39;AAA&amp;#39;)}
    {#output-&amp;gt;true . #quote-&amp;gt;false . #debug-&amp;gt;1 . #strings-&amp;gt;#(&amp;#39;AAA&amp;#39;)}
    {#output-&amp;gt;true . #quote-&amp;gt;false . #debug-&amp;gt;1 . #strings-&amp;gt;#(&amp;#39;AAA&amp;#39;)}
    {#output-&amp;gt;true . #quote-&amp;gt;true . #debug-&amp;gt;2 . #strings-&amp;gt;#(&amp;#39;AAA&amp;#39;)}
&amp;quot;
&lt;/pre&gt;&lt;/div&gt;
&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
    &lt;div align = "right" style="margin-right: 1em;"&gt;
      [&lt;a href="http://ja.doukaku.org/lang/smalltalk/"&gt;
      Smalltalk
      &lt;/a&gt;]
      [&lt;a href="http://ja.doukaku.org/comment/7607/download/"&gt;
      download code
      &lt;/a&gt;]
      &lt;/a&gt;]
    &lt;/div&gt;
    &lt;hr&gt;
  

</description><guid>http://ja.doukaku.org/comment/7607/</guid></item><item><title>sumim's comment on LL Golf Hole 9 - トラックバックを打つ
</title><link>http://ja.doukaku.org/comment/7577/</link><description>



&lt;a href="http://ja.doukaku.org/207/"&gt;LL Golf Hole 9 - トラックバックを打つ&lt;/a&gt;
(&lt;a href="http://ja.doukaku.org/207/nested/"&gt;Nested&lt;/a&gt; 
 &lt;a href="http://ja.doukaku.org/207/flatten/"&gt;Flatten&lt;/a&gt;)


&lt;hr&gt;
  &lt;p&gt;Squeak Smalltalk で。&lt;/p&gt;

&lt;hr&gt;
  
    &lt;table&gt;&lt;tr&gt;&lt;td class="linenos"&gt;&lt;pre&gt;1
2
3
4&lt;/pre&gt;&lt;/td&gt;&lt;td class="code"&gt;&lt;div class="highlight"&gt;&lt;pre&gt;| url pingDict |
url := &amp;#39;http://ll.jus.or.jp/2008/blog/archives/38/trackback&amp;#39;.
pingDict := {#url -&amp;gt; #(&amp;#39;http://ja.doukaku.org/207/&amp;#39;)} as: Dictionary.
^(HTTPSocket httpPostDocument: url args: pingDict) contents
&lt;/pre&gt;&lt;/div&gt;
&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
    &lt;div align = "right" style="margin-right: 1em;"&gt;
      [&lt;a href="http://ja.doukaku.org/lang/smalltalk/"&gt;
      Smalltalk
      &lt;/a&gt;]
      [&lt;a href="http://ja.doukaku.org/comment/7577/download/"&gt;
      download code
      &lt;/a&gt;]
      &lt;/a&gt;]
    &lt;/div&gt;
    &lt;hr&gt;
  

</description><guid>http://ja.doukaku.org/comment/7577/</guid></item><item><title>sumim's comment on 文字列型日時ののN秒後時間取得
</title><link>http://ja.doukaku.org/comment/7518/</link><description>



&lt;a href="http://ja.doukaku.org/204/"&gt;文字列型日時ののN秒後時間取得&lt;/a&gt;
(&lt;a href="http://ja.doukaku.org/204/nested/"&gt;Nested&lt;/a&gt; 
 &lt;a href="http://ja.doukaku.org/204/flatten/"&gt;Flatten&lt;/a&gt;)


&lt;hr&gt;
  &lt;p&gt;Squeak Smalltalk では日時オブジェクト同士の演算が可能です。&lt;/p&gt;

&lt;hr&gt;
  
    &lt;table&gt;&lt;tr&gt;&lt;td class="linenos"&gt;&lt;pre&gt;1
2
3
4
5&lt;/pre&gt;&lt;/td&gt;&lt;td class="code"&gt;&lt;div class="highlight"&gt;&lt;pre&gt;&amp;quot;文字列指定した日時の場合&amp;quot;
&amp;#39;2008-09-01T12:00:00+09:00&amp;#39; asDateAndTime - 10 seconds   &amp;quot;=&amp;gt; 2008-09-01T11:59:50+09:00 &amp;quot;

&amp;quot;現在日時の場合&amp;quot;
DateAndTime now + 15 seconds
&lt;/pre&gt;&lt;/div&gt;
&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
    &lt;div align = "right" style="margin-right: 1em;"&gt;
      [&lt;a href="http://ja.doukaku.org/lang/smalltalk/"&gt;
      Smalltalk
      &lt;/a&gt;]
      [&lt;a href="http://ja.doukaku.org/comment/7518/download/"&gt;
      download code
      &lt;/a&gt;]
      &lt;/a&gt;]
    &lt;/div&gt;
    &lt;hr&gt;
  

</description><guid>http://ja.doukaku.org/comment/7518/</guid></item><item><title>sumim's comment on LL Golf Hole 8 - 横向きのピラミッドを作る
</title><link>http://ja.doukaku.org/comment/7427/</link><description>



&lt;a href="http://ja.doukaku.org/203/"&gt;LL Golf Hole 8 - 横向きのピラミッドを作る&lt;/a&gt;
(&lt;a href="http://ja.doukaku.org/203/nested/"&gt;Nested&lt;/a&gt; 
 &lt;a href="http://ja.doukaku.org/203/flatten/"&gt;Flatten&lt;/a&gt;)


&lt;hr&gt;
  &lt;p&gt;Squeak Smalltalk で。&lt;/p&gt;

&lt;hr&gt;
  
    &lt;table&gt;&lt;tr&gt;&lt;td class="linenos"&gt;&lt;pre&gt;1
2
3
4
5
6&lt;/pre&gt;&lt;/td&gt;&lt;td class="code"&gt;&lt;div class="highlight"&gt;&lt;pre&gt;| n |
n := 4.

World findATranscript: nil.
1 to: n*2-1 do: [:m |
    Transcript cr; show: (String new: {m. n*2-m} min withAll: $*)]
&lt;/pre&gt;&lt;/div&gt;
&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
    &lt;div align = "right" style="margin-right: 1em;"&gt;
      [&lt;a href="http://ja.doukaku.org/lang/smalltalk/"&gt;
      Smalltalk
      &lt;/a&gt;]
      [&lt;a href="http://ja.doukaku.org/comment/7427/download/"&gt;
      download code
      &lt;/a&gt;]
      &lt;/a&gt;]
    &lt;/div&gt;
    &lt;hr&gt;
  

</description><guid>http://ja.doukaku.org/comment/7427/</guid></item><item><title>sumim's comment on LL Golf Hole 7 - バイト数を読みやすくする
</title><link>http://ja.doukaku.org/comment/7318/</link><description>



&lt;a href="http://ja.doukaku.org/202/"&gt;LL Golf Hole 7 - バイト数を読みやすくする&lt;/a&gt;
(&lt;a href="http://ja.doukaku.org/202/nested/"&gt;Nested&lt;/a&gt; 
 &lt;a href="http://ja.doukaku.org/202/flatten/"&gt;Flatten&lt;/a&gt;)


&lt;hr&gt;
  &lt;p&gt;Squeak Smalltalk で。&lt;/p&gt;

&lt;hr&gt;
  
    &lt;table&gt;&lt;tr&gt;&lt;td class="linenos"&gt;&lt;pre&gt;1
2
3
4
5
6
7&lt;/pre&gt;&lt;/td&gt;&lt;td class="code"&gt;&lt;div class="highlight"&gt;&lt;pre&gt;| byte |
byte := 123456789012345.
^(#(&amp;#39;&amp;#39; k M G T P E Z) inject: byte into: [:result :unit |
    result &amp;lt; 1024 ifTrue: [^result asString, unit].
    result / 1024 roundTo: 0.1]) asString, &amp;#39;Y&amp;#39;

&amp;quot;=&amp;gt; &amp;#39;112.3T&amp;#39; &amp;quot;
&lt;/pre&gt;&lt;/div&gt;
&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
    &lt;div align = "right" style="margin-right: 1em;"&gt;
      [&lt;a href="http://ja.doukaku.org/lang/smalltalk/"&gt;
      Smalltalk
      &lt;/a&gt;]
      [&lt;a href="http://ja.doukaku.org/comment/7318/download/"&gt;
      download code
      &lt;/a&gt;]
      &lt;/a&gt;]
    &lt;/div&gt;
    &lt;hr&gt;
  

</description><guid>http://ja.doukaku.org/comment/7318/</guid></item><item><title>sumim's comment on LL Golf Hole 6 - 10進数を2進数に基数変換する
</title><link>http://ja.doukaku.org/comment/7295/</link><description>



&lt;a href="http://ja.doukaku.org/201/"&gt;LL Golf Hole 6 - 10進数を2進数に基数変換する&lt;/a&gt;
(&lt;a href="http://ja.doukaku.org/201/nested/"&gt;Nested&lt;/a&gt; 
 &lt;a href="http://ja.doukaku.org/201/flatten/"&gt;Flatten&lt;/a&gt;)


&lt;hr&gt;
  &lt;p&gt;#7293 の感動を Squeak Smalltalk で（一部を不完全ながら(^_^;)）表現してみました。ｗ&lt;/p&gt;

&lt;hr&gt;
  
    &lt;table&gt;&lt;tr&gt;&lt;td class="linenos"&gt;&lt;pre&gt;1
2
3
4
5
6
7&lt;/pre&gt;&lt;/td&gt;&lt;td class="code"&gt;&lt;div class="highlight"&gt;&lt;pre&gt;| b |
b := [:n |
    | c |
    c := OrderedCollection new: n * 2.
    c add: &amp;#39;1&amp;#39;; do: [:e | (c add: e, &amp;#39;0&amp;#39;; add: e, &amp;#39;1&amp;#39;; size) &amp;gt; n ifTrue: [^c at: n]]].

b value: 10   &amp;quot;=&amp;gt; &amp;#39;1010&amp;#39; &amp;quot;
&lt;/pre&gt;&lt;/div&gt;
&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
    &lt;div align = "right" style="margin-right: 1em;"&gt;
      [&lt;a href="http://ja.doukaku.org/lang/smalltalk/"&gt;
      Smalltalk
      &lt;/a&gt;]
      [&lt;a href="http://ja.doukaku.org/comment/7295/download/"&gt;
      download code
      &lt;/a&gt;]
      &lt;/a&gt;]
    &lt;/div&gt;
    &lt;hr&gt;
  

</description><guid>http://ja.doukaku.org/comment/7295/</guid></item><item><title>sumim's comment on LL Golf Hole 6 - 10進数を2進数に基数変換する
</title><link>http://ja.doukaku.org/comment/7234/</link><description>



&lt;a href="http://ja.doukaku.org/201/"&gt;LL Golf Hole 6 - 10進数を2進数に基数変換する&lt;/a&gt;
(&lt;a href="http://ja.doukaku.org/201/nested/"&gt;Nested&lt;/a&gt; 
 &lt;a href="http://ja.doukaku.org/201/flatten/"&gt;Flatten&lt;/a&gt;)


&lt;hr&gt;
  &lt;p&gt;Squeak Smalltalk で。&lt;/p&gt;

&lt;hr&gt;
  
    &lt;table&gt;&lt;tr&gt;&lt;td class="linenos"&gt;&lt;pre&gt;1&lt;/pre&gt;&lt;/td&gt;&lt;td class="code"&gt;&lt;div class="highlight"&gt;&lt;pre&gt;10 radix: 2   &amp;quot;=&amp;gt; &amp;#39;1010&amp;#39; &amp;quot;
&lt;/pre&gt;&lt;/div&gt;
&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
    &lt;div align = "right" style="margin-right: 1em;"&gt;
      [&lt;a href="http://ja.doukaku.org/lang/smalltalk/"&gt;
      Smalltalk
      &lt;/a&gt;]
      [&lt;a href="http://ja.doukaku.org/comment/7234/download/"&gt;
      download code
      &lt;/a&gt;]
      &lt;/a&gt;]
    &lt;/div&gt;
    &lt;hr&gt;
  

</description><guid>http://ja.doukaku.org/comment/7234/</guid></item><item><title>sumim's comment on LL Golf Hole 5 - 最上位の桁を数え上げる
</title><link>http://ja.doukaku.org/comment/7152/</link><description>



&lt;a href="http://ja.doukaku.org/200/"&gt;LL Golf Hole 5 - 最上位の桁を数え上げる&lt;/a&gt;
(&lt;a href="http://ja.doukaku.org/200/nested/"&gt;Nested&lt;/a&gt; 
 &lt;a href="http://ja.doukaku.org/200/flatten/"&gt;Flatten&lt;/a&gt;)


&lt;hr&gt;
  &lt;p&gt;Squeak Smalltalk で。&lt;/p&gt;

&lt;hr&gt;
  
    &lt;table&gt;&lt;tr&gt;&lt;td class="linenos"&gt;&lt;pre&gt;1
2
3
4
5
6
7&lt;/pre&gt;&lt;/td&gt;&lt;td class="code"&gt;&lt;div class="highlight"&gt;&lt;pre&gt;| n m |
n := 300.
m := 0.
World findATranscript: nil.
[m &amp;lt;= n] whileTrue: [
    Transcript cr; show: m.
    m := m + (10 raisedTo: m asString size - 1)]
&lt;/pre&gt;&lt;/div&gt;
&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
    &lt;div align = "right" style="margin-right: 1em;"&gt;
      [&lt;a href="http://ja.doukaku.org/lang/smalltalk/"&gt;
      Smalltalk
      &lt;/a&gt;]
      [&lt;a href="http://ja.doukaku.org/comment/7152/download/"&gt;
      download code
      &lt;/a&gt;]
      &lt;/a&gt;]
    &lt;/div&gt;
    &lt;hr&gt;
  

</description><guid>http://ja.doukaku.org/comment/7152/</guid></item><item><title>sumim's comment on echoクライアント
</title><link>http://ja.doukaku.org/comment/7127/</link><description>



&lt;a href="http://ja.doukaku.org/199/"&gt;echoクライアント&lt;/a&gt;
(&lt;a href="http://ja.doukaku.org/199/nested/"&gt;Nested&lt;/a&gt; 
 &lt;a href="http://ja.doukaku.org/199/flatten/"&gt;Flatten&lt;/a&gt;)


&lt;hr&gt;
  &lt;p&gt;Squeak Smalltalk で。&lt;/p&gt;

&lt;hr&gt;
  
    &lt;table&gt;&lt;tr&gt;&lt;td class="linenos"&gt;&lt;pre&gt; 1
 2
 3
 4
 5
 6
 7
 8
 9
10&lt;/pre&gt;&lt;/td&gt;&lt;td class="code"&gt;&lt;div class="highlight"&gt;&lt;pre&gt;| serverAddress portNumber socket string |
serverAddress := NetNameResolver addressFromString: &amp;#39;127.0.0.1&amp;#39;.
portNumber := 9999.
socket := Socket newTCP.
socket connectTo: serverAddress port: portNumber.
World findATranscript: nil.
[(string := FillInTheBlank request: &amp;#39;string:&amp;#39;) notEmpty] whileTrue: [
    socket sendData: string, String crlf.
    Transcript show: socket receiveData].
socket close
&lt;/pre&gt;&lt;/div&gt;
&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
    &lt;div align = "right" style="margin-right: 1em;"&gt;
      [&lt;a href="http://ja.doukaku.org/lang/smalltalk/"&gt;
      Smalltalk
      &lt;/a&gt;]
      [&lt;a href="http://ja.doukaku.org/comment/7127/download/"&gt;
      download code
      &lt;/a&gt;]
      &lt;/a&gt;]
    &lt;/div&gt;
    &lt;hr&gt;
  

</description><guid>http://ja.doukaku.org/comment/7127/</guid></item><item><title>sumim's comment on LL Golf Hole 4 - 文章から単語の索引を作る 
</title><link>http://ja.doukaku.org/comment/7076/</link><description>



&lt;a href="http://ja.doukaku.org/198/"&gt;LL Golf Hole 4 - 文章から単語の索引を作る &lt;/a&gt;
(&lt;a href="http://ja.doukaku.org/198/nested/"&gt;Nested&lt;/a&gt; 
 &lt;a href="http://ja.doukaku.org/198/flatten/"&gt;Flatten&lt;/a&gt;)


&lt;hr&gt;
  &lt;p&gt;Squeak Smalltalk で。&lt;/p&gt;

&lt;hr&gt;
  
    &lt;table&gt;&lt;tr&gt;&lt;td class="linenos"&gt;&lt;pre&gt; 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12&lt;/pre&gt;&lt;/td&gt;&lt;td class="code"&gt;&lt;div class="highlight"&gt;&lt;pre&gt;| dict stream delimiters lineCount |
dict := Dictionary new.
stream := HTTPSocket httpGet: &amp;#39;http://www.gnu.org/licenses/gpl.txt&amp;#39;.
delimiters := Character allCharacters reject: [:each | each isLetter].
lineCount := 0.
[stream atEnd] whileFalse: [
    lineCount := lineCount + 1.
    ((stream upTo: Character lf) subStrings: delimiters) do: [:word | 
        | lines |
        lines := dict at: word ifAbsentPut: [OrderedCollection new].
        lines add: lineCount]].
^dict
&lt;/pre&gt;&lt;/div&gt;
&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
    &lt;div align = "right" style="margin-right: 1em;"&gt;
      [&lt;a href="http://ja.doukaku.org/lang/smalltalk/"&gt;
      Smalltalk
      &lt;/a&gt;]
      [&lt;a href="http://ja.doukaku.org/comment/7076/download/"&gt;
      download code
      &lt;/a&gt;]
      &lt;/a&gt;]
    &lt;/div&gt;
    &lt;hr&gt;
  

</description><guid>http://ja.doukaku.org/comment/7076/</guid></item></channel></rss>