[#300221] How about the execution efficiency in Ruby 1.9? — Erwin Moller <hi.steven.tu@...>

Has It been greatly improved?

12 messages 2008/05/01

[#300267] splitting with a regex & keeping a ref? — "Kyle Schmitt" <kyleaschmitt@...>

I'm writing some scripts to help handle some ornery samba servers we

13 messages 2008/05/01

[#300280] Please explain nuances of ||= — Ruby Freak <twscannell@...>

I am reading some of the ruby files in rails and I an seeing the ||=

28 messages 2008/05/01
[#300305] Re: Please explain nuances of ||= — Simon Krahnke <overlord@...> 2008/05/01

* David A. Black <dblack@rubypal.com> (18:56) schrieb:

[#300312] Re: Please explain nuances of ||= — "David A. Black" <dblack@...> 2008/05/01

Hi --

[#300317] Re: Please explain nuances of ||= — Phillip Gawlowski <cmdjackryan@...> 2008/05/01

-----BEGIN PGP SIGNED MESSAGE-----

[#300308] Is there some way to execute a block within an arbitrary lexical scope? — Ruby Talk <rubytalk@...>

Is there some way to execute a block within a certain lexical scope?

10 messages 2008/05/01

[#300384] Extracting a value from an array — Albert Schlef <albertschlef@...>

I have the following array:

18 messages 2008/05/02

[#300431] Reverse Divisible Numbers (#161) — Matthew Moss <matthew.moss@...>

This is a fairly simple quiz this week, as I'm in the middle of

35 messages 2008/05/02

[#300437] Ruby 1.9 wishlist — coderrr <coderrr.contact@...>

Hey I just put together a list of stuff I totally wish Ruby had and I

16 messages 2008/05/02

[#300545] Why there is not "replace" method for Fixnum? — Iñaki Baz Castillo <ibc@...>

Hi, using String#replace I can "simulate" a pointer (thanks to David A. for=

10 messages 2008/05/03

[#300569] Different Ways To Loop — Wyatt Greene <greenewm@...>

I love the flexibility of Ruby. It gives you several ways to do

19 messages 2008/05/04

[#300648] How would you design regexps in the integer domain? — Andreas Launila <ruby-talk@...>

I'm trying to come up with a clean way to specify regexps in the integer

13 messages 2008/05/05

[#300751] Ruby has to be interpreted line by line in runtime, does this affect Ruby's execution efficiency badly? — Erwin Moller <hi.steven.tu@...>

Why doesn't the inventor design a better approach to avoid this

8 messages 2008/05/06

[#300752] In order to cross platform, Ruby is designed to be interpreted in runtime, so Ruby code is exposed on the server. This brings a security danger which is not acceptable. — Erwin Moller <hi.steven.tu@...>

How about PHP? I think the same problem with PHP.

10 messages 2008/05/06
[#300755] Re: In order to cross platform, Ruby is designed to be interpreted in runtime, so Ruby code is exposed on the server. This brings a security danger which is not acceptable. — Phillip Gawlowski <cmdjackryan@...> 2008/05/06

-----BEGIN PGP SIGNED MESSAGE-----

[#300860] Re: In order to cross platform, Ruby is designed to be interpreted in runtime, so Ruby code is exposed on the server. This brings a security danger which is not acceptable. — Clifford Heath <no@...> 2008/05/07

Phillip Gawlowski wrote:

[#300862] Re: In order to cross platform, Ruby is designed to be interpreted in runtime, so Ruby code is exposed on the server. This brings a security danger which is not acceptable. — Phillip Gawlowski <cmdjackryan@...> 2008/05/07

-----BEGIN PGP SIGNED MESSAGE-----

[#300767] Reading from file, create a class with variables — Pelle Strul <aardtwig@...>

Hi, I'm trying to load a file with specifications like:

11 messages 2008/05/06

[#300834] Where to put code for extending a class? — Zoop Zoop <manuel.meurer@...>

I want to extend the String class with a capitalize_each_word method

31 messages 2008/05/06
[#300839] Re: Where to put code for extending a class? — "Robert Dober" <robert.dober@...> 2008/05/06

On Tue, May 6, 2008 at 10:47 PM, Zoop Zoop <manuel.meurer@gmail.com> wrote:

[#300859] Re: Where to put code for extending a class? — Zoop Zoop <manuel.meurer@...> 2008/05/07

Robert, could you explain a bit more what you mean?

[#300864] Re: Where to put code for extending a class? — Phillip Gawlowski <cmdjackryan@...> 2008/05/07

-----BEGIN PGP SIGNED MESSAGE-----

[#300893] Re: Where to put code for extending a class? — "David A. Black" <dblack@...> 2008/05/07

Hi --

[#300919] Word for monkeypatching — Brian Marick <marick@...> 2008/05/07

[#300835] get method in Array subclass: where's it defined? — RichardOnRails <RichardDummyMailbox58407@...>

Hi,

10 messages 2008/05/06

[#300900] Posting Culture — "Robert Klemme" <shortcutter@...>

All,

22 messages 2008/05/07

[#300951] Check if char in string? — globalrev <skanemupp@...>

how do i do this:

31 messages 2008/05/07

[#300967] hash adding values — Tim Wolak <tim.wolak@...>

I'm trying to insert account numbers into a hash and add the balances

18 messages 2008/05/07
[#300972] Re: hash adding values — Sebastian Hungerecker <sepp2k@...> 2008/05/07

Tim Wolak wrote:

[#300973] Re: hash adding values — Tim Wolak <tim.wolak@...> 2008/05/07

Sebastian Hungerecker wrote:

[#300975] Re: hash adding values — "Craig Demyanovich" <cdemyanovich@...> 2008/05/07

Oh, you want to store the balances based on the acct. #, then you want to

[#301029] "Real" Differences Between Python & Ruby — Max Cantor <maxcantor@...>

I have a question about the difference(s) between Python and Ruby. I

20 messages 2008/05/08
[#301197] Re: "Real" Differences Between Python & Ruby — globalrev <skanemupp@...> 2008/05/08

On 8 Maj, 04:09, Phlip <phlip2...@gmail.com> wrote:

[#301296] Re: "Real" Differences Between Python & Ruby — Marc Heiler <shevegen@...> 2008/05/09

I was about to comment on something but when i read this:

[#301305] Re: "Real" Differences Between Python & Ruby — "Max Cantor" <maxcantor@...> 2008/05/09

On Fri, May 9, 2008 at 12:23 PM, Marc Heiler <shevegen@linuxmail.org> wrote:

[#301101] Why can't I redefine "<<" method to allow two parameters? — "Iñaki Baz Castillo" <ibc@...>

SGksIHZlcnkgZXhydGFuZ2U6CgoKY2xhc3MgTXlBcnJheSA8IEFycmF5CiAgYWxpYXMgb3JpZ2lu

14 messages 2008/05/08

[#301129] Comparing String with Symbol — "Iñaki Baz Castillo" <ibc@...>

SGksIGxvc3RzIG9mIFJ1YnkgbWV0aG9kcyBhbGxvdyBTdHJpbmcgb3IgU3ltYm9sIGFzIHBhcmFt

16 messages 2008/05/08

[#301204] Doing an AND in regexp char class — "Todd Benson" <caduceass@...>

This question arises out of a couple of recent threads and may or may

18 messages 2008/05/08
[#301216] Re: Doing an AND in regexp char class — "ara.t.howard" <ara.t.howard@...> 2008/05/08

[#301219] Re: Doing an AND in regexp char class — "Todd Benson" <caduceass@...> 2008/05/08

On Thu, May 8, 2008 at 6:07 PM, ara.t.howard <ara.t.howard@gmail.com> wrote:

[#301278] Delete every other value in an array — Tim Conner <crofty_james@...>

What is the best way to delete every other value in a ruby array?

18 messages 2008/05/09

[#301293] The Turing Machine (#162) — Matthew Moss <matthew.moss@...>

-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-

29 messages 2008/05/09

[#301439] IO#putc writing 2 bytes? — Minic Minic <cg1161@...>

Hey all, thanks for reading. Today is my first attempt at getting some

12 messages 2008/05/11

[#301525] Convert integer to array? — Nadim Kobeissi <kaepora@...>

Let's say I have:

18 messages 2008/05/12

[#301528] Handling of arrays — Clement Ow <clement.ow@...>

A snippet of my code are as follows:

15 messages 2008/05/12
[#301542] Re: Handling of arrays — "Jes俍 Gabriel y Gal疣" <jgabrielygalan@...> 2008/05/12

On Mon, May 12, 2008 at 11:00 AM, Clement Ow

[#301602] Re: Handling of arrays — Clement Ow <clement.ow@...> 2008/05/13

Jes炭s Gabriel y Gal叩n wrote:

[#301611] Re: Handling of arrays — "Jes俍 Gabriel y Gal疣" <jgabrielygalan@...> 2008/05/13

On Tue, May 13, 2008 at 5:22 AM, Clement Ow

[#301719] Re: Handling of arrays — Clement Ow <clement.ow@...> 2008/05/14

Jes炭s Gabriel y Gal叩n wrote:

[#301623] How to convert character to hexadecimal? — "Iñaki Baz Castillo" <ibc@...>

SGksIEkgd2FudCB0byBjb252ZXJ0IHNvbWUgY2hhcmFjdGVyZXMgdG8gaGV4YWRlY2ltYWw6Cgog

21 messages 2008/05/13
[#301639] Re: How to convert character to hexadecimal? — Chris Hulan <chris.hulan@...> 2008/05/13

On May 13, 9:57 am, I=F1aki Baz Castillo <i...@aliax.net> wrote:

[#301842] 40 million levenshtein distances for two long strings — John <john.d.perkins@...>

I am trying to discover similar files to reduce redundancy on a large

12 messages 2008/05/15

[#301848] 7 Ruby Programming ebook — Laurynn <surejaya@...>

Found this on free ebook site.

44 messages 2008/05/15
[#302032] Re: 7 Ruby Programming ebook — Phillip Gawlowski <cmdjackryan@...> 2008/05/16

-----BEGIN PGP SIGNED MESSAGE-----

[#302612] Re: 7 Ruby Programming ebook — Camilo <camilor@...> 2008/05/22

Pablo

[#301898] What is the bes Ruby's book for beginners? — Renato Veneroso <rveneroso@...>

Hi everybody,

20 messages 2008/05/15

[#301937] Matz: can we have rescue/else/ensure available in all blocks? — coderrr <coderrr.contact@...>

Hi Matz,

12 messages 2008/05/15

[#301992] Obfuscated Email — "Matthew Moss" <matthew.moss@...>

_If you want to ignore the introduction and just get to the task, skip down

44 messages 2008/05/16

[#302028] Monkey Patching (definition)? — Christoph Schiessl <c.schiessl@...>

For example. Look the following piece of simple Ruby Code:

12 messages 2008/05/16

[#302034] Not quite getting it. — Roger Alsing <roger.alsing@...>

Hi,

27 messages 2008/05/16
[#302079] Re: Not quite getting it. — "ara.t.howard" <ara.t.howard@...> 2008/05/16

[#302092] Re: Not quite getting it. — Florian Gilcher <flo@...> 2008/05/17

-----BEGIN PGP SIGNED MESSAGE-----

[#302109] Re: Not quite getting it. — Roger Alsing <roger.alsing@...> 2008/05/17

> class Test

[#302064] ruby 1.9 hates you and me and the encodings we rode in on so just get used to it. — DJ Jazzy Linefeed <john.d.perkins@...>

def prep_file(path)

29 messages 2008/05/16
[#353767] Re: ruby 1.9 hates you and me and the encodings we rode in on so just get used to it. — Brian Candler <b.candler@...> 2009/12/27

DJ Jazzy Linefeed wrote:

[#353868] Re: ruby 1.9 hates you and me and the encodings we rode in on so just get used to it. — Bill Kelly <billk@...> 2009/12/29

Brian Candler wrote:

[#302093] Object#select and method_missing — Bob Aman <bob@...>

class SelectTest

14 messages 2008/05/17

[#302112] Dude? — "Robert Dober" <robert.dober@...>

Dear native speakers

39 messages 2008/05/17

[#302348] Why doesn't Float() work the same as Integer()? — "Michael W. Ryder" <_mwryder@...>

In my continuing work learning Ruby while creating a Rational class I

26 messages 2008/05/19
[#302373] Re: Why doesn't Float() work the same as Integer()? — "Eric I." <rubytraining@...> 2008/05/20

On May 19, 7:44=A0pm, "Michael W. Ryder" <_mwry...@worldnet.att.net>

[#302500] Re: Why doesn't Float() work the same as Integer()? — Yukihiro Matsumoto <matz@...> 2008/05/21

Hi,

[#302412] Is Necessary for all rails employee know computer knowledge? — Michel Thapa <abcotech@...>

Hi all Is Necessary for all rails employee know computer knowledge?

15 messages 2008/05/20
[#302414] Re: Is Necessary for all rails employee know computer knowledge? — pjb@... (Pascal J. Bourguignon) 2008/05/20

Michel Thapa <abcotech@gmail.com> writes:

[#302431] Re: Is Necessary for all rails employee know computer knowledge? — Eleanor McHugh <eleanor@...> 2008/05/20

On 20 May 2008, at 13:15, Pascal J. Bourguignon wrote:

[#302477] Is there any good source for the logic behind some of the methods? — "Michael W. Ryder" <_mwryder@...>

I am trying to figure out why methods that seem to do the same thing

11 messages 2008/05/21

[#302489] Ensuring only one instance of a script is running — Daniel Berger <djberg96@...>

Hi all,

14 messages 2008/05/21

[#302565] Prevent ruby constant variables from changing? — George Wang <stdcells@...>

Hi,

36 messages 2008/05/22
[#302599] Re: Prevent ruby constant variables from changing? — Dave Bass <davebass@...> 2008/05/22

George Wang wrote:

[#302601] Re: Prevent ruby constant variables from changing? — Florian Gilcher <flo@...> 2008/05/22

-----BEGIN PGP SIGNED MESSAGE-----

[#302583] Re: Prevent ruby constant variables from changing? — Peña, Botp <botp@...> 2008/05/22

RnJvbTogR2VvcmdlIFdhbmcgW21haWx0bzpzdGRjZWxsc0B5YWhvby5jb21dIA0KIyBJcyB0aGVy

[#302604] Is rdoc (http://www.ruby-doc.org/core/) complete? — "Victor Reyes" <victor.reyes@...>

Hello Team,

10 messages 2008/05/22

[#302632] OOP in Ruby? — aidy <aidy.lewis@...>

Hi,

39 messages 2008/05/22
[#303006] Re: OOP in Ruby? — aidy <aidy.lewis@...> 2008/05/27

On May 26, 3:59 pm, luka luka <dezer...@posta.ge> wrote:

[#303023] Re: OOP in Ruby? — Huw Collingbourne <huw@...> 2008/05/27

aidy wrote:

[#303027] Re: OOP in Ruby? — "Robert Dober" <robert.dober@...> 2008/05/27

On Tue, May 27, 2008 at 2:20 PM, Huw Collingbourne <huw@darkneon.com> wrote:

[#302769] #plural? or #singular? — Mark Dodwell <seo@...>

Does anybody know an easy way to test if a word is singular or plural --

21 messages 2008/05/23
[#302807] Re: #plural? or #singular? — Dave Bass <davebass@...> 2008/05/24

There are lots of difficulties here.

[#302809] Re: #plural? or #singular? — "Robert Dober" <robert.dober@...> 2008/05/24

On Sat, May 24, 2008 at 5:08 PM, Dave Bass <davebass@musician.org> wrote:

[#302812] Re: #plural? or #singular? — "Axel Etzold" <AEtzold@...> 2008/05/24

[#302876] A simple newbie question (arrays and strings) — koichirose <koi@...>

Today I started programming in ruby.

13 messages 2008/05/25

[#302894] briefest method of generating a list of random numbers? — Boris Schmid <boris@...>

Hi all,

11 messages 2008/05/26

[#302911] Why "ABCDE"[0] returns an integer instead of 'A' ? — "Iñaki Baz Castillo" <ibc@...>

SGksIEkgY2Fubm90IHVuZGVyc3RhbmQgaG93IGEgaGlnaCBsZXZlbCBsYW5ndWFnZSBhcyBSdWJ5

12 messages 2008/05/26

[#303002] documentation for ruby? — notnorwegian@...

i think the documentation at http://www.ruby-doc.org/ is fairly

63 messages 2008/05/27
[#303021] Re: documentation for ruby? — Ron Fox <fox@...> 2008/05/27

What sort of documentation are you looking for reference? tutorial?

[#303028] Re: documentation for ruby? — "James Bracy" <waratuman86@...> 2008/05/27

I find ruby-doc to be great. But if you are looking for a tutorial, it

[#303032] Re: documentation for ruby? — "Robert Dober" <robert.dober@...> 2008/05/27

On Tue, May 27, 2008 at 2:58 PM, James Bracy <waratuman86@gmail.com> wrote:

[#303034] Re: documentation for ruby? — Mark Wilden <mark@...> 2008/05/27

On May 27, 2008, at 7:03 AM, Robert Dober wrote:

[#303037] Re: documentation for ruby? — "Victor Reyes" <victor.reyes@...> 2008/05/27

What's top or bottom posting anyway?

[#303039] Re: documentation for ruby? — "Todd Benson" <caduceass@...> 2008/05/27

This is top posting.

[#303046] Re: documentation for ruby? — Mark Wilden <mark@...> 2008/05/27

On May 27, 2008, at 7:39 AM, Todd Benson wrote:

[#303064] Re: documentation for ruby? — "Todd Benson" <caduceass@...> 2008/05/27

On Tue, May 27, 2008 at 9:53 AM, Mark Wilden <mark@mwilden.com> wrote:

[#303066] Re: documentation for ruby? — Phillip Gawlowski <cmdjackryan@...> 2008/05/27

-----BEGIN PGP SIGNED MESSAGE-----

[#303075] Re: Top-posting — Mark Wilden <mark@...> 2008/05/27

[#303077] Re: Top-posting — "Avdi Grimm" <avdi@...> 2008/05/27

My personal opinion:

[#303014] Directionality of comparasion operators — Tobias Weber <towb@...>

Hi,

11 messages 2008/05/27

[#303150] The duck's backside — Tobias Weber <towb@...>

Hi,

75 messages 2008/05/28
[#303179] Re: The duck's backside — Tobias Weber <towb@...> 2008/05/28

In article

[#303202] Re: The duck's backside — Eleanor McHugh <eleanor@...> 2008/05/28

[#303215] Re: The duck's backside — Mark Wilden <mark@...> 2008/05/28

[#303224] Re: The duck's backside — Eleanor McHugh <eleanor@...> 2008/05/28

On 28 May 2008, at 18:57, Mark Wilden wrote:

[#303236] Re: The duck's backside — Mark Wilden <mark@...> 2008/05/28

On May 28, 2008, at 11:45 AM, Eleanor McHugh wrote:

[#303240] Re: The duck's backside — David Masover <ninja@...> 2008/05/28

On Wednesday 28 May 2008 15:09:23 Mark Wilden wrote:

[#303255] Re: The duck's backside — Mark Wilden <mark@...> 2008/05/28

On May 28, 2008, at 1:44 PM, David Masover wrote:

[#303289] Re: The duck's backside — "Avdi Grimm" <avdi@...> 2008/05/29

On Wed, May 28, 2008 at 6:23 PM, Mark Wilden <mark@mwilden.com> wrote:

[#303296] Re: The duck's backside — Mark Wilden <mark@...> 2008/05/29

On May 28, 2008, at 8:59 PM, Avdi Grimm wrote:

[#303322] Re: The duck's backside — "David A. Black" <dblack@...> 2008/05/29

Hi --

[#303315] Re: The duck's backside — David Masover <ninja@...> 2008/05/29

On Thursday 29 May 2008 00:59:42 Mark Wilden wrote:

[#303170] Should I Learn Ruby as a First Language? — MRH <mauriceroman@...>

Hello Group,

64 messages 2008/05/28
[#303176] Re: Should I Learn Ruby as a First Language? — Tobias Weber <towb@...> 2008/05/28

In article

[#303183] Re: Should I Learn Ruby as a First Language? — Mark Wilden <mark@...> 2008/05/28

On May 28, 2008, at 6:01 AM, Tobias Weber wrote:

[#303222] Re: Should I Learn Ruby as a First Language? — "Kyle Schmitt" <kyleaschmitt@...> 2008/05/28

Since nobody's posted it...

[#303234] Re: Should I Learn Ruby as a First Language? — Mark Wilden <mark@...> 2008/05/28

On May 28, 2008, at 11:36 AM, Kyle Schmitt wrote:

[#303174] Merge collections of objects — John Butler <johnnybutler7@...>

Hi,

12 messages 2008/05/28

[#303253] DRb Problems with Mac OS X 10.5.3 — Kurt Schrader <kschrader@...>

It looks like the Mac OS X 10.5.3 upgrade breaks DRb when it's trying to

22 messages 2008/05/28
[#303265] Re: DRb Problems with Mac OS X 10.5.3 — Eric Ly <eric@...> 2008/05/28

I'm running into the same problem too having just upgraded. Is there a

[#303268] Re: DRb Problems with Mac OS X 10.5.3 — Kurt Schrader <kschrader@...> 2008/05/29

No solution yet, but it looks like something has changed in some

[#303293] Re: DRb Problems with Mac OS X 10.5.3 — Andy Keep <akeep@...> 2008/05/29

I've not done too much Ruby socket programming, but it seems to be that

[#303297] Re: DRb Problems with Mac OS X 10.5.3 — "Laurent Sansonetti" <laurent.sansonetti@...> 2008/05/29

Thanks for the report, we are of course very sorry about that. Ruby

[#303362] Surprising Extend — "Leslie Viljoen" <leslieviljoen@...>

Hi people

13 messages 2008/05/29

[#303398] Gems not working — Jim Hoskins <jimh@...>

I am currently not able to install any gems. I was using Gem 1.1.1 but

17 messages 2008/05/29

[#303434] How do i replace actual value in the query with variables? — Ting Chang <aumart@...>

I try to set up a loop to put the data in the array into the oracle

11 messages 2008/05/29

[#303519] getting standard error and output from ruby script in real time — Stefano Crocco <stefano.crocco@...>

I'm trying to write an editor for ruby in ruby using the KDE4 bindings for

10 messages 2008/05/30

[#303571] splitting help needed — Zoe Phoenix <dark_sgtphoenix@...>

I have a program that someone on this forum helped me fix before that

19 messages 2008/05/30
[#303573] Re: splitting help needed — Siep Korteling <s.korteling@...> 2008/05/30

Zoe Phoenix wrote:

[#303576] Price Ranges (#164) — "Matthew Moss" <matthew.moss@...>

Apologies for the late quiz... been rather busy today. Here's another simple

16 messages 2008/05/31

[SUMMARY] The Turing Machine (#162)

From: "Matthew Moss" <matthew.moss@...>
Date: 2008-05-15 18:26:44 UTC
List: ruby-talk #301919
While waiting for 48 hours to pass, several examples of Turing Machine
code were sent in, including one example of over 1,500 lines,
generated by code. Most others were simpler, handcrafted rulesets and
tapes, dealing primarily with the limited input set of binary numbers.
This kept code size smaller and easier to understand.

A thought occurred to me that we might make an Extended Turing
Machine, so we would no longer have to eliminate very repetitive state
information. To take a small portion of one example:

    ...
    mark_start v mark_start v L
    mark_start w mark_start w L
    mark_start x mark_start x L
    mark_start y mark_start y L
    mark_start z mark_start z L
    mark_start _ mark_end   S R
    mark_end   a mark_end   a R
    mark_end   b mark_end   b R
    mark_end   c mark_end   c R
    mark_end   d mark_end   d R
    ...

Using a regular expression for the second argument with an implicit
grouping, we could write our Turing Machines more easily.

    ...
    mark_start [a-z] mark_start $1 L
    mark_start _     mark_end    S R
    mark_end   [a-z] mark_end   $1 R
    ...

I don't doubt that there are other efficiencies we could impose on the
simple Turing Machine language, to create a better language, a better
Turing Machine. Yet, I think the point here is simply to explore the
Turing Machine for what it is, rather than turn it into a higher level
language. If we want that, we might as well stick with Ruby. (Still, a
generator to help us write lengthy Turing Machine programs, such as
was used for the 1500 line example, would be interesting.)

I'm going to look at Alpha Chen's solution this week; it's short and
simple, yet managed to surprise me a little. We start with the last
line: the "main" of the solution.

    Turing.new(ARGV.shift, ARGV.shift).run if __FILE__ == $0

Chen creates a new Turing Machine, passing in the first two command
line arguments, but only if `__FILE__` (a constant containing the
filename) is equal to `$0`. This is a typical check made to see if we
are loading this module in an attempt to execute it, rather than
loading it from another module via the `require` mechanism.

Now to initializing the Turing class.

    def initialize(file, tape=nil)
      @tape = Hash.new('_')
      @head = 0

      # initialize tape
      tape.split(//).each_with_index {|c,i| @tape[i] = c } if tape

      # read program instructions
      @program = Hash.new
      File.open(file).each_line do |line|
        line.gsub!(/#.*/, '') # remove comments
        next if line =~ /^\s*$/ # skip blank lines

        line = line.split(/\s+/)
        @state = line[0] if @state.nil?
        @program[line[0..1]] = line[2..4]
      end
    end

The initialization of `@tape` as a Hash I missed the first time
around. And it may seem strange to use a Hash to represent a tape,
since Array would seem the proper fit. Still, the use of Hash here is
clever to simplify other code later. It might not be a general purpose
trick; still, we're implementing a Turing Machine here, which is
hardly a critical application.

Initializing `@tape` is slightly more complex because of this. The
provided tape, if not nil, is broken into an array of characters by
use of `split(//)`, but this must then be iterated over and each
character inserted into the hash.

Reading the program rules is pretty simple. As each line is read in,
comments are first removed, and then blank lines are skipped via:

    next if line =~ /^\s*$/

This regular expression matches the beginning of the line with `^`,
then end of the line with `$`, and any amount of whitespace with
`\s*`. If a blank line is found, `next` starts the next iteration of
the loop.

After the line is split into words, the program is stored in the
`@program` hash with this:

    @program[line[0..1]] = line[2..4]

Chen's program hash is keyed by two elements: the current machine
state and the symbol under the machine head. These two items form a
more complete state of the machine and keying the hash by this
combined state makes for simple code later. To the hash, for that key,
is inserted the rest of the rule.

Running the machine in Chen's code is done as follows:

    def run
      while next_state = @program[[@state, @tape[@head]]]
        @state, @tape[@head], dir = next_state
        @head += (dir == 'R') ? 1 : -1
      end

      puts @tape.sort.map {|_,v| v}.join.gsub(/^_*|_*$/, '')
    end

As mentioned above, looking up the next state requires keying into the
program with two pieces of information: the current state and the
symbol under the tape's head. If no entry can be found in the program,
`next_state` will be nil and the loop will end.

Otherwise, `next_state` is broken down into its three parts and
assigned to the appropriate portions of the Turing Machine. The
direction is used to update `@head`, either forward or backward one
cell. This is where the use of `@tape` as a Hash, rather than an
Array, simplifies the code. Chen no longer needs to check Array
boundaries, to see if the tape needs to be extended to either the left
or the right. Introducing a new "index" to `@tape` simply allocates
another Hash entry.

After the loop exits, the contents of the tape need to be output.
Because `@tape` is a hash, there is a temptation to call `Hash#values`
to get the content, but such is to be avoided, as I don't believe Ruby
guarantees the order of the values. To get the values out in order
along the tape, Chen uses `Hash#sort` with no block, which will sort
key-value pairs Since the keys are first in each of those pairs, and
the keys are the indices of the tape, the values will be sorted
correctly.

`map` is used to remove the keys and keep only the values, and `join`
binds them back together into a single string. The final bit is a
substitution attempting to strip off any external blanks, so only the
"useful" content of the tape is displayed. Chen's regular expression
(slightly corrected in the code shown above), removes all blanks
immediately after the start of the line _or_ immediately preceding the
end of the line.



Tomorrow, we'll do some simple spam prevention...

-- 
Matthew Moss <matthew.moss@gmail.com>

In This Thread

Prev Next