2007-01-01から1年間の記事一覧

ミルカさんの「約数の和」を Squeak Smalltalk で

結城さんの「数学ガール」より。ミルカさん人気にあからさまに便乗(^_^;)。 まず手始めにレシーバを素因数分解して結果を bag に入れて返す #primeFactorize を定義します。bag に入れているのは気分。w Integer >> primeFactorize | n primeFactors | n :=…

Squeak Smalltalk で油を売ってみる

jijixi's diary - キミならどう書く 2.0 - 2007 - その 1 (問題 1 : 油売り算) ほか経由で、Karetta|キミならどう書く 2.0 - 2007 - その 1 より。 斗桶 (a) に油が 1 斗 (10 升) ある。これを等分したい。7 升枡 (b) と 3 升枡 (c) しかない。この 2 つの枡…

Ruby は Smalltalk の精神を受け継いでいるのか?

Matzにっき - Where I Come From より。 私はいつかSmalltalkがJavaを打ち倒す日が来ると信じてきたが、そうなった時には、それがRubyという名前で呼ばれるとは思いもしなかった。 私はそうとう頭が固いので(^_^;)、ここでケント・ベックが言いたかったのは…

1 から 1000 まで続けて書いてできる整数…を Squeak Smalltalk でいろいろと

1から15まで続けて書くと123456789101112131415となる。これを1つの整数と考えると、この数は21けたで,1が8回使われている。このように、1からある整数まで続けて書いてできる整数について、次の各問いに答えよ。 (1)1か…

あなごる Quine を Squeak Smalltalk で

http://golf.shinh.org/reveal.rb?Quine だーっ。 Quine キボンヌとか言っておいて、いざとなったら気づいていないし。orz Squeak Smalltalk だと、49B 。 thisContext method decompileString allButFirst:8 あ、もっといいのがあった。で、38B 。 []method…

必要に応じて前後の要素にもアクセスできる each 2

id:sumim:20070614:p1 の続き。 spiral さんに #peek を使ってはどうかというコメントをいただいて、なるほどその手があったか…と気がついたので。 Smalltalk には「位置指定可能ストリーム(a PositionableStream)」というものがあって、順序付きコレクシ…

『クロージャによる超軽量並行プロセス』を Squeak Smalltalk で 3

id:sumim:20070618:p2 の続き。 普通にクラスを使ったオーソドックスなものも書きました。もちろん、送受信には #> を。w Object subclass: #Channel instanceVariableNames: 'receivers senders' Channel >> initialize senders := OrderedCollection new.…

『ランキングの集計』を考える

まめめも - [Ruby] ランキングの集計 こういうのはまだ出ていないみたいなので。集計したカウント(重複を排除後、ソート)本位にループを回します。ポイントは Hash#select で同じ順位の要素を集めてまとめて処理していること、でしょうか。 ary = %w(foo b…

『クロージャによる超軽量並行プロセス』を Squeak Smalltalk で

第11回 クロージャによる超軽量並行プロセスの簡単実装法:ITpro jijixi さんや rubyco さんの Ruby 版とは少し趣を変えて、クラスではなくクロージャ(正確にはブロック…)で。newc はチャンネルを生成するブロックとして記述し、send、recv については、ブ…

『クロージャによる超軽量並行プロセス』を Squeak Smalltalk で 2

id:sumim:20070618:p1 からの続き。 フリップフロップ機構はなんのために必要なのかな…と疑問だったので、状態遷移など調べていて謎が解けました。元記事の OCaml の例では、Senders と Receivers が同時に必要となる状況がないのを利用して、空となったそれ…

必要に応じて前後の要素にもアクセスできる each

Greenbear Diary - eachで回してるときの次の要素がほしい こういうのはまだ出ていないみたいなので…。与えたブロック引数の個数をみて適当に割り振ります。 class Array def ya_each(&block) n_args = block.arity.abs mid = n_args / 2 ds = (0...n_args).…

サンタクロース問題を Squeak Smalltalk で 4

id:sumim:20070612:p1 の続きで、こんどは結城さんの 結城浩のはてな日記 - サンタクロース問題を解く(Java) における Java 版を Squeak Smalltalk に。 Ruby と違って Java だと Smalltalk へ直訳っぽく…というのは無理みたいで、書いていていろいろと発見…

サンタクロース問題を Squeak Smalltalk で 5

id:sumim:20070613:p1 の続き。lethevert is a programmer - Java: Re: サンタクロース問題 の Java 版を Squeak Smalltalk で。Java における何ごともクラスで表現するスタイルを踏襲するのは思いのほか大変だと分かったので(^_^;)、お気楽なブロックを使っ…

サンタクロース問題を Squeak Smalltalk で 3

id:sumim:20070608:p1 の続き。 rubyco(るびこ)の日記 - サンタクロース問題を解く(Ruby) で rubyco さんの書いた Ruby 版を、Squeak Smalltalk への意訳にチャレンジ。…と申しましても、Ruby と Smalltalk は互いによく似た部分があるため、例によってほ…

サンタクロース問題を Squeak Smalltalk で 2

id:sumim:20070607:p1 の続き。 jijixi さんの JoCaml 版に触発されて、トナカイとこびとたちが独立したスレッドになっていてチョーかっこいいっ!&ところでこのサンタってぜんぜん寝ないですげー勤勉に働いてなくなくね?版。 | トナカイたち こびとたち …

サンタクロース問題を Squeak Smalltalk で

今日の一行 - [お題] サンタクロース問題 Squeak Smalltalk のスレッドは、処理を記述したブロック [...] に fork を送信することで、手軽に作ってフォークさせられます。ただ、よほどのことがない限り、他へは制御を渡さないので(^_^;)、今回の求められてい…

ミュータブルな Bignum とコンテキストの変更

まめめも - もんだい お呼びでない…とは知りつつも、Squeak Smalltalk だとどうなのかなーと考えたので。 Squeak Smalltalk では、Ruby と違い、Ruby でいうところの Bignum にあたる LargePositiveInteger と LargeNegativeInteger (〜のインスタンス。正…

“Tell, Don't Ask” vs "Ask, Don't Touch"

OOP

L'eclat des jours - なんで? 経由で、The Pragmatic Programmers, LLC: Tell, Don't Ask というのがあるのを知って、ナンダッテーッ!?とか思って読んでみたら、たんなる“ask”違いでした(^_^;)。前者は「(前もってあれこれ)尋ねるな」で、後者は「(メ…

一般化 した FizzBuzz を Squeak Smalltalk で

今日の一行 - FizzBuzz一般化 お題の趣旨をはげしく取り違えていることはご容赦いただくとして、3 に対する Fizz、5 に対する Buzz というように、数値とその倍数の時に置き換える語の任意のペアを与えられるように、メソッド #replaceAllMultiplesAccording…

“lethevert is a programmer - 言語を選ぶ基準”を Smalltalk で

lethevert is a programmer - 言語を選ぶ基準 一般的な Smalltalk の場合、 | f | f := [:x | | g h | g := [:y | x + y]. h := [:x | g value: 10]. h]. (f value: 10) value: 1 "=> 20 " 残念ながら、Squeak Smalltalk ではこれでは駄目で、h のブロック変…

reduce(l|r) を Squeak Smalltalk で

404 Blog Not Found:Code Snippets - reduce(l|r)を実装汁! 定義。 SequenceableCollection >> reducel: binaryBlock ^self allButFirst inject: self first into: binaryBlock SequenceableCollection >> reducer: binaryBlock | nextValue | nextValue := …

Ruby「ファイバ」vs. Io「アクター」 スピード対決

平たく言うとコルーチン対決。ついでに Squeak Smalltalk もスレッドで参戦。環境は 1GHz PowerPC, OS X 。 まず、一個あたりの生成にかかる時間を計測。 Ruby (1..10).each do |n| GC.start num_fs = (n * 1e3).to_i t0 = Time.new root = Fiber.current fs…

Python でいろいろな階乗

4chan BBS - Evolution of a Python programmer 個人的に好きだったのは、 reduce(int.__mul__, xrange(1,11)) Squeak Smalltalk で無理矢理書くと、メソッドオブジェクト(の属するクラス、CompiledMethod)に #value:value: を CompiledMethod >> value: a…

Squeak Smalltalk で 20 minutes ago

Ruby-Like Syntax in C# 3.0 Squeak3.9 には #minutes はあるけれども #ago がないので、改めて Duration に定義。 Duration >> ago ^DateAndTime now - self これで、 20 minutes ago

Squeak Smalltalk で、Python と Haskell のに触発された FizzBuzz

ときどきの雑記帖 リターンズ - HaskellでFizz(ry 経由で、Python の repeat を使った odz buffer - FizzBuzz、Haskell の cycle を使った版とまあ似ていなくもないかな…と思った Squeak Smalltalk の #atWrap: を使った版。 (1 to: 100) collect: [:n | | f…

Ruby の Thread.pass によるスレッドの明示的切り替えは異常に重い?

404 Blog Not Found:ruby & perl - 軽量プロセスをthreadで代用 にあるスクリプトで遊びながら、ふと、明示的にスレッドを切り替えた(つまり、答えを早く出せる順に並ぶ)場合も見てみたくなって次のようにしたところ、id:sumim:20070513:p1 で軽く触れた、…

Erlang の ring benchmark を Squeak Smalltalk で

haskell - haskellのある暮らし - リングノードベンチマーク: Erlang vs Haskell 経由で知った、Programming Erlang の Chapter 7 [β版 PDF] にある課題に Squeak Smalltalk にて挑戦。 そのまえに、Squeak Smalltalk でどのていど太刀打ちできるものなのか…

トレイトで遊ぶための最低限のブラウザ拡張

Squeak3.9 で Traits(トレイト)を扱うにあたっては、公式には OmniBrowser を使え…ということになるのでしょうが、ちょっと試した感じ、残念ながら OmniBrowser は私の手にはなじまないようです。そこで、使い慣れたクラシカルなシステムブラウザでも、ト…

トレイトで、再定義時に遮蔽されてしまうメソッドを super へのメッセージングで呼び出せるようにする方法

Ruby のモジュールや Strongtalk のミックスインは、継承パスに挿入された抽象的なクラスのように振る舞うため、下位のクラスやモジュール(ミックスイン)でオーバーライドしたメソッドでも、 super(Strongtalk では super へのメッセージング)でコールで…

CLOS のパッケージを用いたメソッドコンフリクトへの対処を試みる

昨日のエントリーで shiro さんにコメントをいただいたのをうけて、さっそく CLOS のパッケージについて学んでみました。 On Lisp - パッケージ CLHS: Chapter 11 - Packages xyzzy Lisp Programming - Common Lisp 入門 - パッケージの基本的な使い方 これ…