Scheme��Lisp�ɂ���āA30�`50�N�O�ɓ������ꂽ���܂��܂ȊT�O�́A���̌�̃v���O���~���O����ɑ����ꏭ�Ȃ���e����^���܂����B���̂�����1�ł���N���[�W���́A���^����ł͒��ۉ��̊�{�I�ȕ��@�ƂȂ�A�ŋ߂ł͑����̃X�N���v�g����ɂ��̂�������悤�ɂȂ��Ă��Ă��܂��B�{�e�ł́AScheme����̏����n�AGauche���J�����Ă���썇�j�N�����A�N���[�W���̋@�\�������A���^����ƃI�u�W�F�N�g�w������̊W�ɂ��ĉ�����܂��B
���̘A�ڂ̃o�b�N�i���o�[�͈ȉ��̒ʂ�ł��B�����Ă��y���݂��������B
�A�ڑ�1��F�T���ł�������v���O���~���O����̐V�����y�O�ҁz
�A�ڑ�2��F�T���ł�������v���O���~���O����̐V�����y��ҁz
"Object is a poor man's closure."
Norman Adams
"Closure is a poor man's object."
Christian Queinnec
�@2006�N8���AJava�̎����d�l�iJDK7�j�ɃN���[�W���������*���o����b��ɂȂ�܂����B�N���[�W���͊��^����ł�30�N�ȏ�̗��j�������A�v���O���~���O�ɂ������{�I�ȓ���ƂȂ��Ă��܂��B�ŋ߂�Perl�ARuby�APython�Ȃǂ̌y�ʌ���iLightweight Language�j�ɂ���荞�܂�A����ƒm�炸�Ɏg���Ă��郆�[�U�[�������Ă���̂ł͂Ȃ��ł��傤���B
�@����A�葱���^����̐��E�ł́A���S�ȃN���[�W���͂Ȃ��݂������悤�ł��BC���ꂩ��C++�ւƔ��W���Ă����葱���^����̃��C���X�g���[���ł́A
�Ƃ��������Ƃ����R�ł��傤�B
�@���ہA�N���[�W���ƃI�u�W�F�N�g�w���v���O���~���O����ɂ́A���J�j�Y���I�ɋ��ʂ��镔��������A����𑼕��Ŏ�������̂��ȒP�ȍH�v�����łł��܂��B���̂��߁A�v���O���~���O����ɏ����������߂�����ɂ́A�u�ǂ��炩�������������̃v���~�e�B�u�Ƃ��ăT�|�[�g���ׂ����v�Ƃ̎咣��������܂��B�m���ɁA�N���[�W���𒆐S�Ƃ��邩�I�u�W�F�N�g�𒆐S�Ƃ��邩�ŁA�v���O�����̑g�ݗ��ĕ����قȂ��Ă���ƌ����܂��B
�@�{�e�ł́A�N���[�W���ƃI�u�W�F�N�g�̎����ƈӖ��ɂ����鋤�ʕ����Ƒ��ᕔ�����������邱�ƂŁA�����̃��J�j�Y�������܂��Z����������@���l���Ă݂����Ǝv���܂��B�Ȃ��A�v���O������Ƃ���Scheme��p���Ă��܂�*���A�����͑����̃v���O���~���O����ɋ��ʂł��B
�@�܂��͊ȒP�ɁA�N���[�W���Ƃ͉�����������A���ꂩ��I�u�W�F�N�g�w���Ƃ̈Ⴂ�ɂ��Č��Ă����܂��B
�@�N���[�W���Ƃ́A�����쐬�����Ƃ��̊��i��`�����猩���郍�[�J���ȑ���*�j���u������Łv������̂ł��BC�̂悤�Ɋ��̓����Ŋ����`�ł��Ȃ�����ł́A�u���[�J���Ȋ��̓����Ŋ����쐬����v�Ƃ������Ƃ������������蓾�Ȃ����߁A�N���[�W���̏o�開������܂���ł����B�������A�����̌���ł̓��[�J���Ȋ��̒��Ŋ����`�ł��āA���̊��̒�����O���ɂ��郍�[�J���ϐ����Q�Ƃł��܂��B
�@��̗�����Ă݂܂��傤�B����Scheme�R�[�h�́Amap-add-n�Ƃ��������`���Ă��܂��Badd-map-n�̓����ł́A���[�J���Ȋ�add-n���`���A��map�ɓn���Ă��܂��B
�idefine �imap-add-n n lis�j
�idefine �iadd-n x�j �� add-n���`
�i+ x n�j�j �� add-n���`
�imap add-n lis�j�j �� add-n����map�ɓn���Ă���
�@��add-n�́u����x��n�𑫂��v�A��map�́u�葱���ƃ��X�g�����A���X�g�̂��̂��̂̒l�Ɏ葱����K�p�������ʂ����X�g�ɂ��ĕԂ��v�Ƃ������̂ł��B�]����map-add-n�́u���X�glis�̊e�v�f��n�𑫂������̂̃��X�g��Ԃ��v�Ƃ�����������܂��B
gosh> �imap-add-n 5 '�i1 2 3�j�j
�����l��1�A2�A3����Ȃ郊�X�g�̊e�v�f�ɂ��ꂼ��5�𑫂�
=> �i6 7 8�j �� ���s����
�@Scheme��������Ȃ��ǎ҂̂��߂ɁA���l�̃R�[�h��Python�ŏ����Ă����܂��B
def map_add_n�in, lis�j:
def add_n�ix�j:
return x+n
return map�iadd_n, lis�j
�@Scheme�̃R�[�h�Ɣ�ׂāA���ʂ̈ʒu�ȂǑ̍ق������A�قƂ�Ǔ������ƕ�����ł��傤�B���̌�ɏo�Ă��鑽���̃R�[�h��́A�}�N���������قڈ�Έ�łق��̌���ɕϊ��\�ł��B�ǎ҂̂Ȃ��݂̌���ɕϊ����ǂ�ł���������K���ł��B
�@���āA���[�J���ɒ�`���ꂽ��add-n�́A���̊O���ɂ��郍�[�J���ϐ�n���Q�Ƃ��Ă��܂��Badd-n�����ۂɌĂ��̂�map�̒��ł���Amap�{�͓̂n�������̃��[�J�����Ȃǒm��Ȃ��킯�ł�����A�������������add-n�́A�������e�u�i+ x n�j�v�����łȂ��Amap-add-n�����ꂽ���_�ł̑����i�O�q�̗�ł́un = 5�v�j�����m���Ă���K�v������܂��B��map�ɓn�����add-n�̎��̂́A�P�Ȃ���|�C���^�ł͂Ȃ��A�un = 5�v�Ƃ������Ə������e�Ƃ����킹���I�u�W�F�N�g�ł��B������N���[�W���ƌĂԂ̂ł����B
�N���[�W������*�{��
�@�������A����map-add-n���Ăяo���A���̂Ƃ��ɍ����n�̑��������Ƃ��ĕ����V���ȃN���[�W���������map�ɓn����܂��B
�@���݂�Java�Ɋ��ꂽ�l�ł�����Ainner class���g���Γ������Ƃ��ł��邱�ƂɋC�Â��ł��傤�Binner class�́A�u�����ޕϐ����v���O���}�[�������I�Ɏw�肵�Ă���v�Ƃ����_�������A�ł��邱�Ƃ̓N���[�W���Ƃ������ĕς��܂���B
��Ă̋����҂ł���Neal Gafter�̃u���O�uClosures for Java�v��������₷���B
�����ŏЉ��Scheme�̃R�[�h�́A���ׂ�Scheme�����nGauche�Ńe�X�g���Ă���B�������Ď����Ȃ��痝���������Ƃ������́AGauche���C���X�g�[�����ꂽ���B�Ȃ��A2006�N8�����_�ŁAGauche��Linux/Mac OS X/*BSD/Windows�œ��삷��i�������AWindows�ł�Cygwin���œ��삷��B�l�C�e�B�u���œ��삷��ł����邪�A�܂�����͕s����j�B
�葱���^����Ō����Ƃ���́A�ϐ��̒�`�����ɑ�������B�u���[�J���ȑ����v�Ƃ́A����q�ɂȂ������̒��Œ�`���ꂽ�ϐ����w���B���[�J���ȕϐ��́A����q�̓����̊�����̂ݎQ��/�X�V�ł���B
�����ł́u���v��C����Ȃǂ́A�������e�݂̂������ߗ�A�Ƃ����悤�ȈӖ��Ŏg���Ă���B���^����̑����͂ނ��낷�ׂĂ̊����������̂����R�ł���i�O���[�o���Ȋ��͂��܂��܊�����ł���ƍl����j�A�����ł́u���v�Ɓu�N���[�W���v�͂قړ��`�Ŏg����B
Copyright © ITmedia, Inc. All Rights Reserved.