HOME Python �񤭹���

Perl, Python, Ruby �����


1. �Ϥ����

����ʸ������� �򾯤���ľ��������ΤǤ�������ʸ��˺ܤ��Ƥ��륹����ץȤϤ��ޤ����ʤΤǽ񤭴����ޤ����� �����ȼ������ʸ�Τۤ����ؤ�äƤ��ޤ��� �ޤ����¹ԴĶ��� OS �� Win32 ���� Linux ���ؤ��ޤ����� (���ϲ�²�� Linux ��ȤäƤ��ޤ���)

��ƣ��Ĺǯ������ץȸ���Ȥ��� awk �� Lisp ��ȤäƤ��ޤ����� Perl �Ȥ�����Τ����ꡢ����ϥ֡���ˤʤäƤ����Τ��ΤäƤ����ΤǤ����� �ɤ���ʤ���ʤ��ä��Τǡ��ۤȤ�ɻȤ��ޤ���Ǥ����� �ǶᡢPython �� Ruby �Ȥ��ä�������Υ�����ץȸ��줬�����Ȥ���褦�ˤʤä��Τǡ� �������Ƥߤ뤳�Ȥˤ��ޤ�����

���ߤ� Python ��ȤäƤ���Τǡ�Python ������ӤˤʤäƤ��뤳�Ȥ�ǰƬ�ˤ������ɤ�Ǥ��������� �ޤ�������ʸ�����ȽŪ�ʰո��⤢��Τǡ� ������⻲�ͤˤ��Ƥ���������

����������Ҳ𤷤� ��ǥ����ˤ�������ե������ϡ��ɥǥ���������¸���륹����ץȤǤ��� �¤ϲ椬�ȤΥѥ�����ϤۤȤ�ɥ���Х�Ȳ����Ƥ��ꡢ��ǥ�������ϡ��ɥǥ������˰ܤ�������ץȤ� FireFox �ʳ��Ǥϻ�β�²�˰������Ѥ���Ƥ���ץ������Ǥ���

2. �����ե�������¸������ץȤλ���

���ͤϰʲ����̤�Ǥ���
  1. ����Υǥ��쥯�ȥ�β��˼̿��ѥǥ��쥯�ȥ���ꡢ�����˥�ǥ�������̿����ư���롣
  2. ����Υǥ��쥯�ȥ��̾����ǯ�β�����ȷ��ϥ��ե�ǤĤʤ�����ΤǤ��롣(��: 2007 ǯ 6 �� �� 07-06)
  3. ����Υǥ��쥯�ȥ�β���ʣ���μ̿��ѥǥ��쥯�ȥ꤬���ꡢ�����Τ�̾���� photoNN (N=0-9) �Ǥ��롣
    �̤��ֹ� NN �� 01 ����Ϥ��ޤꡢ1 �Ť����ä��롣
    ���������̿��ѥǥ��쥯�ȥ���̤��ֹ� NN �ϡ����ߤ���̿��ѥǥ��쥯�ȥ���̤��ֹ�κ����ͤ� 1 ��ä������ ����Ϥ���롣
�ʲ��Τ褦�˼������ޤ���
  1. ��ǥ����Υǥ��쥯�ȥ���������ơ��ǥ��쥯�ȥ�̾�򥭡��Ȥ������Υǥ��쥯�ȥ�ˤ�������ե������ �ꥹ�Ȥ��ͤȤ���ϥå���ɽ���롣
  2. ����Υǥ��쥯�ȥ꤬�ʤ���к�롣
  3. ����Υǥ��쥯�Ȥ��Ĵ�١��̿��ѥǥ��쥯�ȥ���̤��ֹ���֤���Ϥ��Ф��������롣
  4. ��ǥ����ˤ���̿���ǥ��쥯�ȥꤴ�Ȥ� HDD �˥��ԡ����롣
  5. HDD �˥��ԡ����������ե�����ȡ���ǥ����ˤ����Ȥ�Ȥβ����ե��������Ӥ��ơ� ��������Х�ǥ����Υե�����������롣
�㤨�С�
��ǥ����� imag1, imag2 �Ȥ��������ե���������ä��ե�����������ꡢ ����Υǥ��쥯�ȥ�� photo01, photo02 �Ȥ����ǥ��쥯�ȥ꤬���ä���硢 photo03, photo04 �Ȥ����ǥ��쥯�ȥ���ꡢimag1, imag2 �ˤ�������ե������ ���줾�� photo03, photo04 ����¸���ޤ��� (imag1 �� imag2 �ν�� (�ɤ��餬�줤���ʤ�) �ϵ��ˤ��ޤ���)

3. Perl, Python, Ruby �ǽ񤤤Ƥߤ�

2. �ǽҤ٤����ͤ˱�ä� Perl, Python, Ruby �ǽ񤤤Ƥߤޤ����� ���ߡ�Python ��ȤäƤ���Τǡ�Python �Τ�Ĥ�¾�Τ�ꤦ�ޤ��񤱤Ƥ���Ȼפ��ޤ��� �鿴�Ԥ������Ҥ��γؽ��ǽ񤯤Ȥɤ��ʤ뤫����ʸ���򸫤Ƥ���������

3.1. �ޤ���Perl ��

Perl �ǽ񤯤ȼ��Τ褦�ˤʤ�ޤ�������ϵ�ʸ��Τ��Ѥ�äƤ��ޤ���
01:     #! perl
02:     
03:     use strict;
04:     use File::Copy;
05:     use File::Compare;
06:     use File::Find;
07:     use Cwd;
08:     
09:     ## global parameters
10:     my $DOC_DIR = 'D:/doc';
11:     my $MEDIA ='G:/';
12:     my $PHOTO_VIEWER = 'D:/WBIN/linar160/linar.exe';
13:     
14:     # getting the string of "year(NN)-month(NN)" 
15:     sub get_year_month{
16:     my ($m, $y) = (localtime)[4,5];
17:     sprintf ("%02d-%02d", $y-100, $m + 1);
18:     }
19:     
20:     # getting the starting number of photoNN, the directory in which photos should be saved
21:     # This function should be called when the program is in the month directory.
22:     sub get_first_photo_dir_number{
23:       my  @pdirs = (glob "photo[0-9][0-9]");
24:       @pdirs ? 1+ substr($pdirs[-1], -2) : 1;
25:     }
26:     
27:     #move into the directory "$DOC_DIR/y-m"
28:     sub move_into_dir_of_month{
29:       my $dir_of_month =  &get_year_month;
30:       unless ($DOC_DIR eq cwd){
31:         chdir $DOC_DIR or die "Cannot move to $DOC_DIR: $!";
32:       }
33:       unless (-d $dir_of_month){
34:         mkdir $dir_of_month or die "cannot create $dir_of_month: $!";
35:       }
36:       chdir $dir_of_month or die "Cannot move to $dir_of_month: $!";
37:       "$DOC_DIR/$dir_of_month" ;
38:     }
39:     
40:     #archive photos in the media into the HD
41:     # This function should be called when the program is in the month directory.
42:     sub archive_photos{
43:       my $photo_dir_number = shift;
44:       my %dhash;
45:       find({
46:         wanted      => sub{push @{$dhash{$File::Find::dir}}, $_ if -f},
47:       }, $MEDIA);
48:       for my $dir_from (sort keys %dhash){
49:         my $n = @{$dhash{$dir_from}};
50:         my $i = 0;
51:         my $dir_to = sprintf("photo%02d", $photo_dir_number++);
52:         mkdir $dir_to or die "cannot create $dir_to: $!";
53:         print "\n$dir_from ==> $dir_to\n";
54:         for my $fname (@{$dhash{$dir_from}}){
55:           my $copy_from = "$dir_from/$fname";
56:           my $copy_to   = "$dir_to/$fname";
57:           copy($copy_from, $copy_to) or die "cannot make a copy for $copy_from: $!";
58:           if(0 == compare($copy_from, $copy_to)){
59:             unlink $copy_from;
60:             print ++$i, "/$n\r";
61:           }else{
62:             die "an error occurs during coping $copy_from";
63:           }
64:         }
65:       }
66:       %dhash;
67:     }
68:     
69:     #main
70:     my $dir_of_month = &move_into_dir_of_month;
71:     my $first_photo_dir_number =  &get_first_photo_dir_number;
72:     if(&archive_photos($first_photo_dir_number)){
73:       exec (sprintf "%s %s/photo%02d", $PHOTO_VIEWER, $dir_of_month, $first_photo_dir_number);
74:     }else{
75:       print "No photos in the media!\nGive Return:";
76:       &lt STDIN>
77:     }
���� 80 �Ԥ��餤�Υ����ɤˤʤ�ޤ��� �ꥹ�Ȥ� Perl �Υϥå���ɽ���ͤˤϤʤ�ʤ��Τǥꥹ�Ȥ��ͤȤ�������С� �ꥹ�ȤΥ�ե���󥹤�Ȥ�ɬ�פ�����ޤ��� ���ݤȤ��Ƥϡ�awk �� sed �򺮤�����Τ򤽤�Ŭ���ϰϳ��ޤdz�ĥ���������Ȥ��������Ǥ��� ���������Υ���ߤ����ʴ����ǡ����ޤ����� ���������饤�֥���ͥ���ǡ��¹�®�٤�®���Ǥ���

���� python �� ruby ������Τǡ����ޤ��鿷���� perl ��ؤ�ɬ�פ�̵���Ȼפ��ޤ���

3.2. ���� Python

Python �ǽ񤯤ȼ��Τ褦�ˤʤ�ޤ������ǤΤϤ����Ƥʤ��Τǽ�ľ���ޤ�����
001:   #! /usr/bin/env python
002:   
003:   r"""
004:   script to achive photos in the removal media into HD
005:   by T.Shido
006:   June 26, 2007
007:   """
008:   
009:   import os, os.path, filecmp, shutil, re, sys, operator
010:   from datetime import date
011:   
012:   # global parameters
013:   HD    = '/home/pub/photos/'
014:   MEDIA = '/media/usbdisk/'
015:   
016:   REG_FILE = re.compile(r"\.(gif|bmp|jpe?g|tiff?|wav|mov)$", re.I)
017:   REG_DIR = re.compile(r'^photo[0-9][0-9]$')
018:   
019:   def n_photo_dir(d):
020:       """return the max NN of photoNN in directory of the month"""
021:       
022:       return \
023:         reduce(max, \
024:                [ int(x[-2:]) for x in os.listdir(d) \
025:                  if (os.path.isdir(os.path.join(d,x)) and REG_DIR.match(x))], \
026:                0)
027:   
028:   def search_media(d):
029:       """search Media and returns a hash
030:       whose keys are directory name and the values are lists of photo files."""
031:       def search_sub(d):
032:           os.chdir(d)
033:           ls_d = os.listdir(d)
034:           ls_f = [x for x in ls_d if os.path.isfile(x) and REG_FILE.search(x)]
035:           if ls_f:
036:               h[d] = ls_f
037:           for d1 in [os.path.join(d,x) for x in ls_d if os.path.isdir(x)]:
038:               search_sub(d1)
039:               
040:       h={}
041:       search_sub(d)
042:       return h
043:           
044:   def move_photos(d0, d1):
045:       r"""
046:       Moveing photo files from media into HD,
047:       """
048:       dir_of_month = os.path.join(d1, date.today().strftime("%y-%m"))
049:       h = search_media(d0)
050:       total_files = reduce(operator.__add__, [len(v) for v in h.itervalues()], 0)
051:   
052:       if total_files==0:
053:           print "No photos in the media: give return"
054:           sys.stdin.readline()
055:           sys.exit()
056:               
057:       if not os.path.isdir(dir_of_month):
058:           os.mkdir(dir_of_month)
059:                   
060:       i_dir = n_photo_dir(dir_of_month)
061:       count=0
062:   
063:       for d, ls_files in h.iteritems():
064:           i_dir += 1
065:           d_to = os.path.join(dir_of_month, "photo%02d" % i_dir)
066:           os.mkdir(d_to)
067:           
068:           for f in ls_files:
069:               f_from=os.path.join(d,f)
070:               f_to=os.path.join(d_to, f)
071:               shutil.copyfile(f_from, f_to)
072:               if not filecmp.cmp(f_from, f_to):
073:                   print f_from + " and " + f_to + " are not same!"
074:                   sys.exit()
075:               os.remove(f_from)
076:               count+=1
077:               print "%d/%d\n" % (count, total_files),                
078:   
079:   if __name__=='__main__':
080:       move_photos(MEDIA, HD)
���� 80 �Ԥˤʤ�ޤ���Ĺ�������� Perl �ǽ񤤤���Τ�Ʊ���Ǥ��� �������θ��ɤ��ϤȤƤ��ɤ��� ����ǥ�Ȥǥ֥��å���ɽ������Ȥ��������ǥ����������Ƥ���Ȼפ��ޤ��� �����Τ褦��ʷ�ϵ��Ǥ��ä���Ȥ��Ƥ��ޤ��������ǥ��󥰤μ�ͳ�٤����ʤ��Τǡ� �ʣ�ǯ���μ�ʬ��ޤ��ï���񤤤Ƥ�Ʊ���褦�ʥ����ɤˤʤꡢ�ɤ߼��Τ��ưפǤ��� ���Τ��ᡢ�����Ȥ��̤⾯�ʤ��ƺѤߡ��ѿ�̾�򥳥�������˻Ȥ�ɬ�פ⤢��ޤ��� �ѿ��ϥǥե���ȤǶɽ��ѿ��Ȥʤ�Τǡ� Perl �Τ褦�� my ���������ɬ�פϤ���ޤ��� �ޤ����ꥹ�Ȥ�����ɽ���� Lisp �� mapcar �� remove-if-not ��Ʊ���˽����Τ������Ǥ��� �饤�֥���ͥ���ǡ��¹�®�٤� Perl ���®���������ޤ���

������ץȸ���Ȥ��Ƥη�����󤲤�ȡ�

  1. �ؿ��ȥ᥽�åɤ����꺮���äƤ���ΤǤ��ä��ꤷ�ʤ���
  2. ¿���Υ⥸�塼��� import ���ʤ���Фʤ�ʤ�����80 �Ԥ� 8 �Ĥ⤢���
������ޤ���

���줫�顢Python �ˤ� ���å⡼�ɤ����ꡢ�ġ��δؿ���ƥ��ȤǤ��ޤ���(��1�� ���ε�ǽ���礭��Υץ�������񤯤Ȥ��������Ǥ��� main ������������ʬ�� if __name__=='__main__': �Υ֥��å�������뤳�Ȥˤ�äơ� Python �ˤ�ä�ľ���ɤ߹��ޤ줿�Ȥ��ʳ���ư��ʤ��褦�ˤ��뤳�Ȥ�����ޤ�������2��
�ġ��δؿ��Υƥ��Ȥϼ��Τ褦�ˤ��ޤ���

  1. �ץ���ץȤ��� python �Ȥ����Ǥ���������å⡼�ɤ�����ޤ���
  2. import hoge �Ȥ��ƥ�����ץȤ��ɤ߹��ޤ��ޤ��� ���㤨�� hoge.py ���ɤ߹������
  3. ���Ȥ� hoge.foo([1,2,3]) �ʤɤȤ��ơ��ġ��δؿ���ƥ��Ȥ��ޤ�����hoge.py �� foo �Ȥ����ؿ��� �������Ƥ������

3.3. �Ǹ�� Ruby

����Ǥϡ� Ruby �ǤϤɤ��ʤ�Ǥ��礦���� (�����񤭴����ޤ���)
001:   #! /usr/bin/env ruby
002:   
003:   require "fileutils"
004:   
005:   # global parameters
006:   HD    = '/home/pub/photos/'
007:   MEDIA = '/media/usbdisk/'
008:   
009:   REG_FILE = Regexp.compile("\\.(gif|bmp|jpe?g|tiff?|wav|mov)$",Regexp::IGNORECASE)
010:   REG_DIR = Regexp.compile('^photo[0-9][0-9]$')
011:   
012:   H=Hash.new    
013:   # HD ¦�˲��Ĥ� photoNN �ե�����������뤫���֤��ޤ���
014:   def n_photo_dir(d)
015:     Dir.entries(d).select{|x| FileTest.directory?(File.join(d,x)) and REG_DIR =~ x
016:      }.map{|x| x[5..6].to_i}.inject(0){|x,y| max(x,y)}
017:   end
018:   
019:   # ��ǥ�������¸����Ƥ���̿��ե�����ΰ�����ե���������ȤˤޤȤ���֤��ޤ�
020:   # �Ƶ�Ū�˥ե�������Υĥ꡼�򲼤äƤ������̿��ե�����ΰ�����ե������̾�򥭡��Ȥ��ƥϥå���ɽ����Ͽ���ޤ�
021:   def search_media(d)
022:   
023:     Dir.chdir(d)
024:     ls=Dir.entries(d).reject{|x| x=='.' or x=='..' }
025:   
026:     ls_f=ls.select{|x| FileTest.file?(File.join(d, x)) and REG_FILE =~ x}
027:     
028:     H[d] = ls_f unless ls_f.empty? 
029:     ls.map{|x| File.join(d,x)}.select{|x| FileTest.directory?(x)}.each{|x| search_media(x)}
030:   end
031:   
032:   # �̿��ե�������ǥ������� HD �˥��ԡ����ޤ�
033:   def move_photos(d0, d1)
034:       dir_of_month=File.join(d1, Time.now.strftime("%y-%m"))
035:       search_media(d0)
036:       total_files = H.values.map{|x| x.size}.inject(0){|result, item| result + item }
037:       
038:       if total_files==0
039:       then
040:           p "no photos, give return"
041:           STDIN.readline
042:           abort
043:       end
044:       
045:       FileTest.directory?(dir_of_month) or Dir.mkdir(dir_of_month)
046:       
047:       i_dir = n_photo_dir(dir_of_month)
048:       count=0
049:       
050:       H.each{|d, ls_files|
051:           i_dir += 1
052:           d_to = File.join(dir_of_month, sprintf("photo%02d", i_dir))
053:           Dir.mkdir(d_to)
054:           
055:           ls_files.each{|f|
056:   
057:               f_from=File.join(d,f)
058:               f_to=File.join(d_to, f)
059:               FileUtils.cp(f_from, f_to)
060:               
061:               if not FileUtils.cmp(f_from, f_to)
062:               then
063:                   printf("Copy failed: %s => %s\n", f_from, f_tp)
064:                   abort
065:               end
066:               File.delete(f_from)
067:               count+=1
068:               printf("%d/%d\n", count, total_files)
069:           }
070:       }
071:   end
072:   
073:   #main
074:   move_photos(MEDIA, HD)
Ĺ���� 74 �ԤȤʤꡢ���Ĥ���ǰ���û���ʤ�ޤ��� �������θ��ɤ��Ⱝ���ʤ����ǡ������ԥꥪ�ɤ������顢����� ή��Ƥ����褦�ʴ����Ǥ������礦�ɡ�Lisp �����ɤ���̤��椫�鳰�˥ǡ�����ή���褦�� ������Τ�Ʊ��ʷ�ϵ��Ǥ��� �ޤ������Ƥ��᥽�åɤʤΤǤ��ä��ꤷ�Ƥ��ޤ���

Win32 �ǻ���Ȥ��Ϥ������٤��ä��ΤǤ�����Linux ��ǤϤ���ʤ��٤������ޤ���Ǥ����� Ruby �� Linux �������������Τ��⤷��ޤ���

4. �Ȥ����櫓�� Python

Perl, Python, Ruby ����Ӥ�ޤȤ��ȤĤ���ɽ�Τ褦�ˤʤ�ޤ��� ���ߤ� Python ��ȤäƤ���ΤǤ��󤼤��ʿ����ӤǤϤ���ޤ���

���� Perl Python Ruby
�񤭤䤹�� �� �� ��
�ɤߤ䤹�� �� �� ��
�饤�֥�꡼ �� �� ��
�¹�®�� �� �� ��
�ɥ������ �� �� ��
�桼������ �� �� ��
�����ɤν񤭤䤹���ϣ��ĤȤ⤽��ۤɰ��ʤ��褦�˻פ��ޤ����������ɤߤ䤹���ϥ���ȥĤ� Python �� ͥ��Ƥ��ޤ���Ruby �Ϥޤ��ޤ��ǡ�Perl �Ͻ񤭼�ε��̤ˤ����ʬ���礭���ΤǤ����� ����Ū�ˤ� "�ɤ�ʤ�" �����ɤˤʤ꤬���Ǥ���

���ߤο͵���̵�뤷�ơ����줽�Τ�ΤΤ褷������ͤ���ȡ� Python �� Ruby �Ϥܸۤ߳ѤǤ��礦�������������ΤȤ��� Python �������� �¹�®�٤�®�����饤�֥�꤬˭�٤ʤΤǡ��Ȥꤢ���� Python ��Ȥ����Ȥˤ��ޤ��� �ޤ���Python �ˤ����å⡼�ɤ�����Τ� Lisp �˴��줿�ʹ֤ˤȤäƤϤ��꤬�����Ǥ��� Ruby �Ϻ���η�Ʈ�˴��Ԥ��ޤ���

5. ������

�ʾ� Perl, Python, Ruby ����Ӥ�Ĥ�Ť�Ƚ񤭤ޤ����������ͤˤʤ�ޤ����Ǥ��礦���� �����ϡ�
  1. Python, Ruby �� Perl ����٤����餫�ˤ褤���ʸ�ȯ�ʤΤ���������
  2. Python �� Ruby �Ϥܸۤ߳ѡ�
�Ǹ�˼�� Web docments ��󤲤Ƥ����ޤ���

6. �ɵ��ʤ⤦�����ޤ������ӡ�

���ʸ�ϤϾ����ʥ�����ץȤ�񤤤ƤߤƤ��ν��������Ӥ��������ʤΤǡ� �����ǤϤ⤦�����ޤ������Ӥ򤷤����Ȼפ��ޤ������ߤ� Python ��ȤäƤ���Τ� Python ������ɾ�ˤʤäƤ��ޤ���

Perl �� Ruby �Ͻ��ʥ�����ץȸ���ǡ��ʤ�����󤽤�ʤ���礭�ʥץ�������񤱤�褦�ˤϤʤäƤ����ΤΡ� �ץ�������û�����뤳�Ȥ˼�㤬�֤���Ƥ��ޤ��� ������Python �ϥ�����ץȸ���Ȥ��Ƥ�Ĥ������絬�ϥץ�������������ǡ��ǥХå����ưפ��˼�㤬 �֤���Ƥ��ޤ����ץ�����ߥ󥰸����Ŭ���ϰϤ������ۤɳؤֲ��ͤ�����Τǡ� ���ΰ�̣�� Python ��ؤ֤��Ȥ� Perl �� Ruby ��ؤ֤��ͭ�Ѥ��Ȼפ��ޤ��� �ʤ��Τ��Ȥ��� google �� Perl �� Ruby �Ǥʤ��� Python ��ȤäƤ��� ��ͳ��ʬ����褦�ʵ������ޤ�����

�����ˤ������Ƥϰ���Python ��ᤰ���Ƚ�ʣ���Ƥ��ޤ��� Python �Υݥꥷ���ˤĤ��Ƥ� A morality tale of Perl versus Python �������� ��The Zen of Python �������ˤ򸫤Ƥ���������

6.1. �絬�ϥץ������κ���

Python �� Perl �� Ruby ����٤��絬�ϥץ�����ब�ưפ˺���Ȥ�������������ޤ��� �ޤ��������ʥ�����ץȤ��礭�ʥץ������˰�Ƥ뤳�Ȥ����䤹�� �Ȥ������Ȥ� Python ����ħ�Ǥ��� Python ���絬�ϥץ�����ब���䤹���Τϼ�����ͳ�˵��ޤ���
  1. �������ե����뤴�Ȥ�̾�����֤�������Ƥ��롣
  2. ���å⡼�ɤǴؿ����Ĥ��Ĥ�ƥ��Ȥ��뤳�Ȥ�����롣
  3. if __name__=='__main__' �ʲ��˥ե����뤴�ȤΥƥ��ȥ����ɤ�񤯤��Ȥ�����롣
Perl �� Ruby �Ǥ�̾�����֤�ʬ���뤿��������虜�虜�񤫤ʤ���Ф����ޤ��� Python �Ǥ����ե����룱̾�������ȳ���ڤꡢ �ե�����̾��̾������̾�Ȥ��뤳�Ȥˤ�ä�̾���ξ��ͤ���˲��򤷤Ƥ��ޤ��� �ޤ��� Perl �Ǥ� Ruby �Ǥ�Ϥ��ᤫ��⥸�塼�����ѤΥ����ɤ�񤫤ʤ���Фʤ�ޤ��󤬡� Python �ǤϤϤ���ξ����ʥ�����ץȤ� __all__ �ʤɤ� ��«�����­���Х⥸�塼��Ȥ��Ƶ�ǽ���ޤ����ޤ������Υ�����ץ�ñ�ΤǤ�Ĥ������Ȥ� ����ޤ����㤨�� wxPython �� Tkinter �� Eight Queens ���� �򸫤Ƥ���������

6.2. �ե�������ɤ߹���

Perl �Ǥϴ���Ū�� while(<>) ��Ȥäư�Ԥ��ĥե�������ɤ߹��ߤޤ����� Python �� Ruby �Ǥ� read() ��Ȥäƥե������쵤���ɤ߹��ळ�Ȥ����ޤ��� ����3�� ����ϡ�Python �� Ruby ���о줷�� 1990 ǯ��ϥ��꡼���¤��ʤä�����������ʻȤ����������褦�ˤʤä�������� �פ��ޤ���

6.3. �ꥹ�Ȥ����

Lisp �ˤ��� mapcar, remove-if-not �ʤɤΥꥹ�Ȥ����ƥꥹ�Ȥ��֤��ؿ��ϡ� Perl, Python, Ruby �Ǥϰʲ��Τ褦�ʤäƤ��ޤ��� ���Τʤ��� Ruby ������ Lisp �˶ᤤ���ͤˤʤäƤ��ޤ���Python �� Lisp �Ȥϰ�����褷�Ƥ���褦�Ǥ���

������Ǥ�����μ¿��ξ�硢����ʿ�������֤��� [-3,-2,-1,0,1,2,3] �� [0.0, 1.0, 1.4142135623731, 1.73205080756888]

01:     # Perl 5
02:     my @ls0=(-3,-2,-1,0,1,2,3);
03:     my @ls1=();
04:     for  (@ls0){
05:       push @ls1, sqrt($_) if $_ >= 0;
06:     }
07:     print "$_\n"  for (@ls1);
08:     
09:     # Ruby
10:     p [-3,-2,-1,0,1,2,3].select{|x| x>=0}.map{|x| Math.sqrt(x)}
11:     
12:     # Python
13:     import math
14:     print [math.sqrt(x) for x in [-3,-2,-1,0,1,2,3] if x>=0]

6.4. �������Ϥ���

6.5. �ؿ�������

�ؿ��������ϰʲ��Τ褦�ˤ��ޤ���Perl �� Ruby �Ǥϴؿ����֤��ؿ����񤱤ޤ����� Python �Ǥ����̤Ϥ����������Ȥ򤷤ޤ���(
��)���������ꡢ�ؿ��Υ��饹��������ޤ��� Python �ǽ񤯤� Perl �� Ruby ���Ĺ���ʤ�ޤ����������������ϣ��Ĥ��� �Υݥꥷ���˽��ä���ΤǤ����ޤ������ʣ���ʴؿ�������������Ϥष�����ε�ˡ�Τۤ������ä��ꤹ��Ǥ��礦��

������ѵ��������� �ʿ�n���ꡢ�ֿ�i���ä�n��i�������ä������������ä����ͤ��֤��ؿ��פ��֤��褦�ʴؿ���

01:     # Perl 5
02:     sub foo {
03:       my ($n) = @_;
04:       sub {$n += shift}
05:     }
06:     
07:     #  Python
08:     class foo:
09:         def __init__(self, n):
10:             self.n = n
11:         def __call__(self, i):
12:             self.n += i
13:             return self.n
14:                 
15:     # Ruby
16:     def foo (n)
17:         lambda {|i| n += i }
18:         end
������

01:     >>> a=foo(10)
02:     >>> a(3)
03:     13
04:     >>> a(5)
05:     18

6.6. �ⳬ�ؿ�

�ǥ��쥯�ȥ��Ƶ�Ū�ˤ��ɤäơ��ե�����ʤ�ؿ���Ŭ�Ѥ���ؿ� walk_dir �� python �� ruby �ǽ񤯤Ȱʲ��Τ褦�ˤʤ�ޤ���

[walk_dir.py]

001:   #!/usr/bin/env python
002:   # coding:shift_jis
003:   
004:   from __future__ import with_statement
005:   import os, os.path, sys
006:   
007:   
008:   def walk_dir(f, d, exp=''):
009:       u'''�ǥ��쥯�ȥ��Ƶ�Ū�ˤ��ɤä����ƤΥե�����˴ؿ� f ��Ŭ�Ѥ��ޤ�'''
010:       
011:       for p0 in os.listdir(d):
012:           p1 = os.path.join(d, p0)
013:           if os.path.isfile(p1) and p1.endswith(exp):
014:               f(p1)
015:           elif os.path.isdir(p1):
016:               walk_dir(f, p1, exp)
017:   
018:               
019:   def head(fname):
020:       u'''�ǽ�� 5 �Ԥ�ɽ������'''
021:       print '====  %s  ====' % (fname,)
022:       with file(fname) as f:
023:           for i, line in enumerate(f):
024:               if i==5: break
025:               print line
026:   
027:   
028:   # ������ץȤ�ľ�ܸƤФ줿�Ȥ��˰ʲ��Υ֥��å����¹Ԥ���ޤ���
029:   if __name__=='__main__':
030:       walk_dir(head, os.getcwd(), '.py')

[walk_dir.rb]

001:   #! ruby
002:   
003:   
004:   # walk directories recursively
005:   # and apply proc if the element is a file
006:   def walk_dir(proc, d=nil, exp='')
007:     Dir.foreach(d){|s|
008:       if s != '.' and s != '..' then
009:         p=File.join(d,s)
010:         case File.ftype(p)
011:         when "file"
012:           if(exp.length==0 or File.extname(p) == exp) then
013:             proc.call(p)
014:           end
015:         when "directory"
016:           walk_dir(proc, p, exp)
017:         end
018:       end
019:     }
020:   end
021:   
022:   # show first 5 lines of a file
023:   def head(fname)
024:     print "\n\n====  " + fname + "  ===\n"
025:     i=0
026:     open(fname) do |f|
027:       f.each{|line|
028:         if i==10 then break end
029:         print line
030:         i+=1
031:       }
032:     end
033:   end
034:   
035:   #-----
036:   
037:   walk_dir(lambda{|fname| head(fname)}, Dir.pwd, '.rb')    

6.7. ����¾

��1��
Python �ϸ���ε�ǽ�Ȥ������ôĶ��򥵥ݡ��Ȥ��Ƥ��ޤ��� perl �Ǥ� Term::Readline::Gnu �ˤ��� perlsh ��Ȥ��� Python ��Ʊ�����Ȥ��Ǥ��뤽���Ǥ��� ruby �Ǥ� irb ��Ʊ�����Ȥ��Ǥ��ޤ���

��2��
perl �� ruby �Ǥ�Ǥ��뤽���Ǥ��������ε�ǽ�ϡ��⥸�塼����̾�Υ�����ץȤν񼰤�Ʊ���Ǥ���Ȥ��� python ����ħ�����äƽ��ư��Ϥ�ȯ������Ȼפ��ޤ��� perl �� ruby �Ǥ��ε�ǽ��ͭ���˻Ȥä����¸�Τ����Ϥ���������������

��3��
perl �ǥե������쵤���ɤ߹���ʤ��Ȥ��äƤ���櫓�ǤϤ���ޤ��� perl �ǰ쵤�ɤߤ���ˤϼ��Τ褦�ˤ��뤽���Ǥ���

my $data = do{ local $/; <STDIN>};


HOME Python �񤭹���