1. Qiita
  2. 投稿
  3. Smalltalk

Squeak Smalltalkでズンドコキヨシ

  • 0
    いいね
  • 0
    コメント
    | zundoko last5 set |
    zundoko := #(ズン ズン ズン ズン ドコ) asOrderedCollection.
    last5 := zundoko copy.
    set := zundoko asSet.
    Transcript countOpenTranscripts isZero ifTrue: [Transcript open] ifFalse: [Transcript clear].
    [Transcript show: (last5 removeFirst; add: set atRandom); space. last5 = zundoko] whileFalse.
    Transcript show: 'キ・ヨ・シ!'
    


    日本語Squeakなど、日本語表示が可能な Squeak Smalltalk 環境でワークスペースなどに貼り付けて do it すると動かせます。以下、各行でやっていることを簡単に解説。


    | zundoko last5 set |

    テンポラリ変数(zundoko、last5、set)の宣言。


    zundoko := #(ズン ズン ズン ズン ドコ) asOrderedCollection.

    #(ズン ズン ズン ズン ドコ) 配列(#ズン 4つと #ドコを要素に持つ)を asOrderedCollection で可変長配列へ変換して zundoko に代入。


    last5 := zundoko copy.

    zundoko をコピーして last5 に代入。


    set := zundoko asSet.

    zundoko をセット(重複を許さない順不同集合)に変換して set に代入。


    Transcript countOpenTranscripts isZero ifTrue: [Transcript open] ifFalse: [Transcript clear].

    トランスクリプト(標準出力もどき)のウインドウがひとつもなければ新たに開いて、あれば中身を消去。


    [Transcript show: (last5 removeFirst; add: set atRandom); space. last5 = zundoko] whileFalse.

    last5 の最初の要素を除いてから、set(#ズン と #ドコ を要素に持つ)のどちらか(atRandom)を追加。追加した要素(#ズン か #ドコ)が返値になるので、それをトランスクリプトに出力(show:)。続けてスペースを出力準備。last5 が zundoko に一致するまで繰り返し。


    Transcript show: 'キ・ヨ・シ!'

    「キ・ヨ・シ!」を出力して終了。