private Expression GenMapCall(MapCall ph, Expression prev)
            {
                Contract.Requires <ArgumentNullException>(ph != null);
                if (ph.FirstArg == null && prev == null)
                {
                    throw Error("「それぞれ」の対象が指定されていません。", ph.Range.Start);
                }
                if (ph.FirstArg != null && prev != null)
                {
                    throw Error("「それぞれ」の対象が二重に指定されています。", ph.Range.Start);
                }
                var value = prev ?? ElemGen.GenElem(ph.FirstArg.Argument);

                Expression lambda;

                {
                    var param = Expression.Parameter(typeof(object), "要素");
                    var args  = new List <Expression> {
                        ElemGen.GenElemCore(ph.Target), param
                    };
                    var sfxs = new List <string>();
                    if (ph.FirstArg != null)
                    {
                        sfxs.Add(ph.FirstArg.Suffix);
                    }
                    foreach (var pair in ph.Arguments)
                    {
                        args.Add(ElemGen.GenElem(pair.Argument));
                        sfxs.Add(pair.Suffix);
                    }
                    var callInfo = new CallInfo(args.Count - 1, sfxs);
                    DynamicMetaObjectBinder binder;
                    if (ph.Target.ElementType == ElementType.Symbol && !(args[0] is ParameterExpression))
                    {
                        binder  = Factory.InvokeMemberBinder(((Symbol)ph.Target).Name, callInfo);
                        args[0] = Global;
                    }
                    else
                    {
                        binder = Factory.InvokeBinder(callInfo);
                    }
                    lambda = Expression.Lambda(Expression.Dynamic(binder, typeof(object), args), "それぞれ", new[] { param });
                }
                return(Expression.Dynamic(Factory.MapBinder, typeof(object), lambda, value));
            }
            private Expression GenMapCall(MapCall ph, Expression prev)
            {
                Contract.Requires<ArgumentNullException>(ph != null);
                if (ph.FirstArg == null && prev == null)
                    throw Error("「それぞれ」の対象が指定されていません。", ph.Range.Start);
                if (ph.FirstArg != null && prev != null)
                    throw Error("「それぞれ」の対象が二重に指定されています。", ph.Range.Start);
                var value = prev ?? ElemGen.GenElem(ph.FirstArg.Argument);

                Expression lambda;
                {
                    var param = Expression.Parameter(typeof(object), "要素");
                    var args = new List<Expression> { ElemGen.GenElemCore(ph.Target), param };
                    var sfxs = new List<string>();
                    if (ph.FirstArg != null)
                        sfxs.Add(ph.FirstArg.Suffix);
                    foreach (var pair in ph.Arguments) {
                        args.Add(ElemGen.GenElem(pair.Argument));
                        sfxs.Add(pair.Suffix);
                    }
                    var callInfo = new CallInfo(args.Count - 1, sfxs);
                    DynamicMetaObjectBinder binder;
                    if (ph.Target.ElementType == ElementType.Symbol && !(args[0] is ParameterExpression)) {
                        binder = Factory.InvokeMemberBinder(((Symbol)ph.Target).Name, callInfo);
                        args[0] = Global;
                    }
                    else {
                        binder = Factory.InvokeBinder(callInfo);
                    }
                    lambda = Expression.Lambda(Expression.Dynamic(binder, typeof(object), args), "それぞれ", new[] { param });
                }
                return Expression.Dynamic(Factory.MapBinder, typeof(object), lambda, value);
            }