��l�̂��߂̃u���b�N�{�b�N�X�lj��u���\�\�N���[�W���ƃI�u�W�F�N�g�̔����Ȋ֌W�F�v���O���~���O����̐i����ǂ��i1/2 �y�[�W�j

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

» 2007�N03��29�� 15��30�� ���J
[�썇�j�N�CITmedia]

���̘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

  • �K�[�x�W�R���N�V�������������A���[�J���ϐ����X�^�b�N�ɒu�����Ƃ���{�Ƃ��錾��̂��߁A�N���[�W���Ƃ̑�������������
  • �I�u�W�F�N�g�w�����̂����邱�ƂŃN���[�W���̑�p�Ƃł���

�Ƃ��������Ƃ����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

�N���[�W���ɂ�铮�I�I�u�W�F�N�g

�@�܂��͊ȒP�ɁA�N���[�W���Ƃ͉�����������A���ꂩ��I�u�W�F�N�g�w���Ƃ̈Ⴂ�ɂ‚��Č��Ă����܂��B

�N���[�W�������炢

�@�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

  • �N���[�W�����֐��{�‹�

�@���ā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

���̃y�[�W�ŏo�Ă������p��

Java�̎����d�l�iJDK7�j�ɃN���[�W���������

��Ă̋����҂ł���Neal Gafter�̃u���O�uClosures for Java�v��������₷���B

�v���O������Ƃ���Scheme��p���Ă��܂�

�����ŏЉ��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


�@�@�@�@�@�@ 1|2 ���̃y�[�W��

Copyright © ITmedia, Inc. All Rights Reserved.

'; e_dlv.innerHTML = html; adRequest({position:dlv_pos,dom:true}); }else if(ad_type === 'gam'){ var html = '
'; e_dlv.innerHTML = html; refreshGam('InArtSpecialLink'); }else if(ad_type === 'logly'){ var html = '
'; e_dlv.innerHTML = html; loglySet(g_id); }else if(ad_type === 'google'){ var html = '
'; e_dlv.innerHTML = html; googletag.cmd.push(function(){ var slot8 = googletag.defineSlot('/43042345/nlab_artinsert_RT',[[336,280],[300,250],'fluid'],'div-gpt-ad-1551176482959-0').addService(googletag.pubads()); googletag.pubads().enableSingleRequest(); googletag.enableServices(); googletag.display('div-gpt-ad-1551176482959-0'); googletag.pubads().refresh([slot8]); }); } }; var insert_ok = function(_target,_str){ var clearfix = d.createElement('div'); clearfix.className = 'colBoxClear'; if(ad_float_fix){ e_body.insertBefore(e_dlv,_target); e_body.insertBefore(clearfix,_target.nextElementSibling); }else{ e_body.insertBefore(e_dlv,_target); } set_dlv(); }; var insert_ng = function(_str){ e_dlv.style.display = 'none'; }; var main = function(){ var e_nodes = e_body.childNodes; // BODY �����q�v�f var e_tags = []; // BODY �����^�O var p_num = []; // BODY ���� P �^�O�ʒu var p_target_num; // �g�}����ʒu var o_float = {}; // ��荞�ݗv�f var o_this = {}; // �A�N�e�B�u�^�O var o_next = {}; // �A�N�e�B�u�^�O�̎��̃^�O var flag_insert = 0; // �}���t���O // ��荞�ݗv�f�`�F�b�N var check_float = function(_e){ var e = 0; if(_e.id.match(/^col\d{3}(l|r)$/)){ e = _e; } return e; }; // �v�f�� Y ���W�ƍ����̍��v�l var get_element_y = function(_e){ var ey = 0; var eh = _e.offsetHeight; while(_e){ ey += _e.offsetTop; _e = _e.offsetParent; } return ey + eh; }; var check_ptag = function(_e){ var e = 0; if(_e.tagName && _e.tagName === 'P'){ e = _e; } return e; }; var try_insert = function(){ p_target_num = Math.floor(p_num.length / 2) - 1; if(p_target_num >= _maxrange) p_target_num = _maxrange; if(dis_con) p_target_num = 0; for(var i = p_num[p_target_num]; i < e_tags.length; i++){ o_this.e = check_ptag(e_tags[i]); if(o_this.e){ o_next.e = check_ptag(e_tags[i + 1]); if(o_next.e){ if(!o_float.e || check_float(e_tags[i - 1])){ o_float.e = check_float(e_tags[i - 1]); o_float.n = i - 1; } if(o_float.e && o_float.n < i + 1){ o_float.y = get_element_y(o_float.e); o_this.y = get_element_y(o_this.e); set_line(o_float.y,'red'); set_line(o_this.y,'blue'); if(o_float.y < o_this.y){ flag_insert = 1; insert_ok(o_next.e,_threshold + ' �p���ȏ��荞�݂���'); break; } }else{ flag_insert = 1; insert_ok(o_next.e,_threshold + ' �p���ȏ��荞�݂Ȃ�'); break; } } }else{ o_float = {}; } } if(!flag_insert){ insert_ng('�}���ʒu�Ȃ�'); } }; // �S�q�v�f����^�O�̂ݔz��ɓ���� for(var i = 0; i < e_nodes.length; i++){ if(e_nodes[i].tagName){ e_tags.push(e_nodes[i]); } } // �S�^�O���� P �^�O�ʒu��z��ɓ���� for(var i = 0; i < e_tags.length; i++){ if(e_tags[i].tagName === 'P') p_num.push(i); // �ŏ��̉�荞�ݗv�f���i�[ if(!o_float.e){ o_float.e = check_float(e_tags[i]); o_float.y = get_element_y(o_float.e); o_float.n = i; } } if(p_num.length >= _threshold){ try_insert(); }else{ insert_ng('P �^�O ' + _threshold + ' �ȉ�'); } }; if(e_body){ main(); }else{ insert_ng('�L���{���Ȃ�'); } })(document,4,5);

���ڂ̃e�[�}

���Ȃ��ɂ������߂̋L��PR