ã¿ãã«
ã¿ãã«ïŒè±: tupleãè±èªçºé³: [tÊp(É)l, tuËp(É)l]ãã¿ãã«ããã¥ãŒãã«ïŒãšã¯ãè€æ°ã®æ§æèŠçŽ ãããªãçµãç·ç§°ããäžè¬æŠå¿µã§ãããã«ã¿ã«ãèªãšããŠã¯äž»ã«èšç®æ©ç§åŠã«ãããŠé åºä»ãããã察象ã®äžŠã³ã衚ãããã«çšãããããn åã§ã§ããçµãè±èªã§ãn-tupleããšæžãããšã«ç±æ¥ããæ°åŠã§ã¯æ¥æ¬èªã«èš³ãå Žåãéåžžãn çµããšããã¿ãã«ã®æŠå¿µãã®ãã®ãçµãšåŒã°ããããªãã n-tuple ã¯æ°åŠã®ã¿ãã«ãæå³ããã»ããåæ§ã« doubleãtriple ãªã©ã®æ¡åŒµãšããŠåæ°è©ã®è¡šçŸã«ãå©çšãããïŒè©³çްã¯ãå#è¥¿æŽæ°åŠã«ããã n åã衚ã衚çŸããåç §ïŒã
æ°åŠã«ãããã¿ãã«
[ç·šé]éåè«ã§ã¯ n çµ (n-tuple) ãšã¯ n åã®å¯Ÿè±¡ a1, a2, ..., an ã®é åºã¥ããããçµã§ãããæ®éãæ¬åŒ§ã§ããã£ãŠ (a1, a2, a3, ..., an) ã®ããã«æžãããã ã¿ãã«ãé åºã¥ããããŠãããšããããšã¯ãã2ã€ã® n çµ (a1, a2, ..., an) ãš (b1, b2, ..., bn) ãçããããšãã衚çŸã®æå³ããããšããã察å¿ããäœçœ®ã®èŠçŽ ããã¹ãŠçãããšããããªãã¡ã (a1 = b1) â§ (a2 = b2) â§ ... â§ (an = bn) ã§ãããšãããã€ãã®ãšãã«éããããšãæå³ããã ã¿ãã«ãšçŽç©éåã«ã¯å¯æ¥ãªé¢ä¿ããããn çµã® i çªç®ã®å¯Ÿè±¡ãéå Ai ã®èŠçŽ ãšã¿ãªããããªãã°ãn çµã¯çŽç©éå A1 à A2 à ... à An ã®èŠçŽ ã§ããã
2 ã€ã®èŠçŽ a â A, b â B ã®é åºã¥ããããçµ (a, b) â A à B ã¯ç¹ã«é åºå¯Ÿ (ordered pair) ãšåŒã°ããã 圢åŒäžã¯éã«ããã®é åºå¯Ÿãå ãšããããšã«ãã£ãŠäžè¬ã® n çµ (n â§ 2) ããäŸãã° (a1, a2, a3, ..., an) = (...((a1, a2), a3), ..., an) ã®ããã«ããŠæ§æçã«å®ããããšãã§ããã
ã¿ãã«ã¯æ§ã ãªæ°åŠæŠå¿µãå®çŸ©ããããã«ãå©çšãããã äŸãã°ãæéãªãŒãããã³ã¯ãå ¥åã¢ã«ãã¡ãããã®æééå Σ, ç¶æ ã®æééå S, åæç¶æ s0 â S, é·ç§»é¢æ° ÎŽÂ : Σ à S â S, åçç¶æ ã®æééå F â S ã® 5 ã€çµ (quintuple, 5-tuple) (Σ, S, s0, ÎŽ, F) ãšããŠå®ããããæåã°ã©ãã¯ãé ç¹éå V ãšèŸºã®éå A â V à V ã®é åºå¯Ÿ (V, A) ãšããŠå®ããããã
ãªãæ°ãã¯ãã«ãåãããã«èŠçŽ ã®é åºã¥ãããã䞊ã³ãšããŠè¡šãããããæ°åŠã®åœ¢åŒäžãããç·åœ¢ç©ºéã®èŠçŽ ãšã¿ãªããããã¯ãã«ã¯å®æ°ãè€çŽ æ°ãªã©åãäœã®èŠçŽ ãããªããã®ã§ããã 察ããŠãã¿ãã«ã¯ä»»æã®éåã®èŠçŽ ã䞊ã¹ãã ãã®ãã£ãšäžè¬çãªæŠå¿µã§ãããšãããã
èªæº
[ç·šé]è±èªã«ãããã¿ãã«ãšããçšèªã¯ãã·ã³ã°ã« (single)ãããã« (double)ãããªãã« (triple)ãããã«4ã€çµã®ã¯ã¢ãã«ãã« (quadruple)ã5ã€çµã®ã¯ã€ã³ãã¥ãŒãã« (quintuple) ãšãã£ããé¡äŒŒã®æ¥å°ŸèŸããã€ã©ãã³èªç³»ã®è±èªã®äžŠã³ãæœè±¡åã㊠n ã¿ãã« (n-tuple) ãšåŒã¶ããã«ãªã£ãããšã«ç±æ¥ãããâ-tupleâãšããŠè¡šãçšäŸã¯1863幎ããèŠãã[1]ãéåè«ã«ãããŠç¬ç«ããåèªãšããŠæ±ãããããã«ãªãããã®åŸPythonã®ãããªã³ã³ãã¥ãŒã¿èšèªã«åãå ¥ãããããåæ§ã®æ°è©ã«é¢ããè±èªã®æ¥å°ŸèŸããçãŸããèšèãšããŠã¢ãªãã£ãããã
ã¿ãã«ã®å ãšãªã£ãèŠçŽ ã®åæ°ã«ããåå¥ã®åç§°ã¯ãã©ã³ã¹èªã«ç±æ¥ããã©ãã³èªç³»ã®èªåœã§ãå°ãªããšããã¯ã€ã³ãã¥ãŒãã«ããŸã§ãšãããã¥ãã«ãã¯èŒžå ¥åœæã®ãã©ã³ã¹èªããçŽæ¥åãç¶ãã ãã®ã§ãããã - ãã¥ãŒãã«ããã - ãã¥ãã«ããšãªãåæãã - ã¿ãã«ããšåŒã¶ããšããã(ã¯ã€ã³ã¿ãã«ãã»ã¯ã¹ã¿ãã«ãªã©)ããŸããã¯ãªãã«ãŒãã«ãã¯ãã«ãã©ãã«ãããã¯ã¢ãã©ãã«ããšãèšãã
ãããã®æŠå¿µãåèš³ãããå Žåã¯ãæ§ã ãªåãåœãŠãããŠãããäŸãšããŠã¯ãã·ã³ã°ã«ãã®å Žåã¯ãäžéããäžã€çµãããããã«ããªãã°ãäºéããäºã€çµãããã«ãã©ãã«ãã§ã¯ãåéããåã€çµããããã«ãã«ãã§ã¯ãåéããååçµããªã©ããã·ã³ã°ã«ããããã«ããããªãã«ãã«ã€ããŠã¯åŒã³æ¹ãããã«ãããã·ã³ã°ã«ã¯ãç¬ããããã«ã¯ããã¢ãããã®åèš³ã§ããã察ããããªãã«ã¯ãéŒããå ãŠãããããšãããã
| èŠçŽ ã®æ° | åå¥ã®åç§° | è±å |
|---|---|---|
| 1 | ã·ã³ã°ã« | single |
| 2 | ããã« | double |
| 3 | ããªãã« | triple |
| 4 | ã¯ãªãã«ãŒãã« | quadruple |
| 5 | ã¯ã€ã³ãã¥ãŒãã« | quintuple |
| 6 | ã»ã¯ã¹ãã¥ãŒãã« | sextuple |
| 7 | ã»ããã¥ãã« | septuple |
| 8 | ãªã¯ãã¥ãã« | octuple |
| 9 | ããã¥ãã« | nonuple |
| 10 | ããã¥ãã« | decuple |
| 100 | ã»ã³ãã¥ãã« | centuple |
ã¿ãã«å
[ç·šé]åã·ã¹ãã çã«ã¯ã代æ°çããŒã¿åã§ããçŽç©åãã®ãã®ã§ãããC#ãC++ãHaskellãMLãPythonãScalaãTypeScript ãšãã£ãå€ãã®ããã°ã©ãã³ã°èšèªã«ã¿ãã«åããããããã€ã㯠(x, y) ãšãã£ããããªæ§æã§ã¿ãã«åã®å€ãçŽæ¥èšè¿°ã§ããã
åçãªåä»ããæã€èšèªã§ã¯ãã³ã³ããåã䜿ãããšã§æžãŸãããŠããå Žåããããäžæ¹ã§Pythonã®ããã«ãé·ããåŸããå€ããããªãã°ããã§ãªãèŠçŽ ãå€ããããšãã§ããªããšãããããªãã¿ãã«å°çšã®ãªããžã§ã¯ããçšæããŠããå Žåãããã
éçãªåä»ããæã€èšèªã®å Žåããªã¹ãåãã³ã³ããåã®èŠçŽ ã¯ãåºæ¬çã«ãªãããã®ãåããåã§ãªããã°ãªããªãã®ã§ããããã®éç©åãã¿ãã«ã®ç®çã«æµçšããããšã¯äžå¯èœã§ããããã®ãããã®ç¯ã®åé ã®ããã«ã¿ãã«ãªããåçã®ãã®ããµããŒãããŠããããšãå€ããäžæ¹ã§ãç°¡æã«å®çŸ©ã§ããããŒã¿ã¯ã©ã¹ã®ãããªã¯ã©ã¹ãçšæããŠåçã®ç®çã«å¿ããKotlinã®ããã«ãã¿ãã«åãæäŸããŠããªãèšèªãããã
Lispã®å Žå
[ç·šé]ïŒäŒçµ±çãªïŒLispã®å Žåãåºæ¬çã«ã¯ç·åãªã¹ããäœãããã®ããŒã¿æ§é ã§ããã³ã³ã¹ã»ã«ïŒcons cellïŒããèŠçŽ 2åã®ã¿ãã«ïŒäºãçµïŒã«æµçšãããcons, car, cdr ãšãããªã¹ãæäœçšã®é¢æ°ããã®ãŸãŸæµçšããããæ ŒçŽããããŒã¿ã®åã«å¶éã¯ãªãã
(cons caréšã®ããŒã¿ cdrã®ããŒã¿)
caréšã®ããŒã¿ãåãåºãã«ã¯é¢æ° car ã䜿ããcdréšã®ããŒã¿ãåãåºãã«ã¯é¢æ° cdr ã䜿ãã
(setq x (cons 'A 1))
(setq a (car x)) ; a ã«ã¯ 'A ãå
¥ã
(setq b (cdr x)) ; b ã«ã¯ 1 ãå
¥ã
ãŸãã
(list ããŒã¿1 ããŒã¿2 ããŒã¿3 ⊠ããŒã¿N)
ãšãã颿°åŒã³åºãã¯ã
(cons ããŒã¿1 (cons ããŒã¿2 (cons ããŒã¿3 ⊠(cons ããŒã¿N nil) ⊠)))
ãšãã圢ãããªãã¡ãcaréšã«ããŒã¿ããããcdréšãåŸç¶ã®ã³ã³ã¹ã»ã«ã«ãªã£ãŠãããæåŸã®cdréšåã nil ãšããç¹æ®ãªèšå·ã§çµç«¯ãããäºåæšãè¿ãããã®ãããªåœ¢åŒã®äºåæšã¯ãã¡ãããšããããªã¹ãã«ãªã£ãŠãããšèšããããšããããïŒããããŒïŒãªã¹ãããªã©ãšããã
Python ã«ãããã¿ãã«
[ç·šé]Python ã«ãããã¿ãã«ã¯ãä»»æã®èŠçŽ æ°ã®å€ããŸãšããŠããããã²ãšã€ã®å€ã®ããã«æ±ãæ©èœã§ããã
ã¿ãã«ã§ã¯èŠçŽ ã®å ïŒæ°å€åãæåååãªã©ïŒã®åäžæ§ã¯äžåã§ãããããšãã° ('A', 1) ãšããæååãšæŽæ°ãã²ãšå¡ãšããŠå€æ°ã«ä»£å
¥ã§ããã
x = ('A', 1)
Pythonã¯ãŒããŸãã¯ã²ãšã€ã®èŠçŽ ãšãªãã¿ãã«ãèªããŠããããšãã«1èŠçŽ ã®ã¿ãã«ã¯ããã°ã©ãã³ã°èšèªãšããŠã¯çãããæ®éããã®ãããªãã®ã¯èšç®ã®åªå é äœã倿ŽããããããŸãã¯1åŒæ°é¢æ°ã®åŒæ°ãæ¬ãããã®æ¬åŒ§ãšåºå¥ã§ããªãããã§ãããPythonã®å ŽåãèŠçŽ ã«ç¶ããŠã«ã³ãã眮ãããšã§èå¥ãããã«ã³ããå¿ãããšã¿ãã«ãšããŠèªèã§ããªããªã£ãŠããŸããšããããšã§ãããã
x = (1,) # 1èŠçŽ ã®å Žåã()å
æ«å°Ÿã®ã«ã³ãã«æ³šæ
y = () # 0èŠçŽ ã®å Žåã颿°åèšèªã§ã¯ãŠããããšããŠç¥ãããŠããããã¿ãã«ãšã¯å¥ã«èªããã
ã¿ãã«ã¯é¢æ°ã®è¿ãå€ãšããŠäœ¿ãããšãã§ãããããã«ãã£ãŠãè€æ°ã®å€ãè¿ã颿°ãå®çŸããããšãã§ããã
def func():
return ('A', 1)
x = func() # x ã«ã¯ ('A', 1) ãå
¥ã
ãŸããã¿ãã«ã¯äžèšã®ããã«ããŠåå¥ã®èŠçŽ ãåé¢ããã
x = ('A', 1)
(a, b) = x # a ã«ã¯ 'A'ãb ã«ã¯ 1 ãå
¥ã
Haskellã«ãããã¿ãã«
[ç·šé]MLç³»ã®é¢æ°åèšèªã«ã»ãŒå ±éããŠèšããããšãšããŠãååž°çãªããŒã¿åã§ãããªã¹ããšã¯ç°ãªããã¿ãã«ã¯ããã§ãªãç¹ãããããŸãããªã¹ãã®èŠçŽ ã¯åäžã®åã®ã¿ã蚱容ããã®ã«å¯Ÿããã¿ãã«ã®èŠçŽ ã¯åãåããªãããããããŒã¿æ§é ãååž°çãåŠããšããç¹ã«ç±æ¥ãããã®ã§ããããŸããèŠçŽ ãžã®ã¢ã¯ã»ã¹ã¯ãã¿ãŒã³ãããã³ã°ããå é èŠçŽ ãšãã®æ¬¡ã®èŠçŽ çšåºŠãŸã§ãæ±ãã颿°ãããªããååž°çã«å®çŸ©ãããŠããªããããååž°é¢æ°ã§æç¹°ãããšãé£ãã(ãªã¹ããªãå é ãšæ®ãã«åé¢ããããšã§å®¹æã«è¡ãã)ãã«ãããããããå€ãã®é¢æ°åèšèªã¯60ååŸã®èŠçŽ ãŸã§èš±å®¹ãããŠããã
Haskellã§ã¯ãPythonã«é¡äŒŒããæ¹æ³ã§å©çšã§ããéšåããããPythonãªã©ã«åœ±é¿ãäžããåŽãªã®ã§åœç¶ãšããã°åœç¶ã§ããã
x = ('A', 1)
(a, b) = x -- a ã«ã¯ 'A'ãb ã«ã¯ 1 ãå
¥ãããã¿ãŒã³ãããã®äŸ
ã¢ã¯ã»ã¹é¢æ°ãšããŠã¯ã第1èŠçŽ ãååŸããfstãšã第2èŠçŽ ãååŸããsndãããã
x = ('A', 1)
a = fst x -- a ã«ã¯ 'A' ãå
¥ã
b = snd x -- b ã«ã¯ 1 ãå
¥ã
Haskellã§ã¯ã2èŠçŽ ã®ã¿ãã«ã¯ããŒã¿æ§ç¯å (,) ã§å®çŸ©ãããã3èŠçŽ ãªã (,,) ã§ãæå€§ã®èŠçŽ æ°ã¯64ã§ãããããããã¯ã«ã³ãã63å䞊ã¶ããšã«ãªãã以äžã¯ã©ã¡ããåãã¿ãã«ãçæãããã
x = ('A', 1)
y = (,) 'A' 1
ãã¡ããã»ã¯ã·ã§ã³(æŒç®åã®éšåé©çš)ãå¯èœã§ããã
x = (, 'A')
f y = x -- y ã«1ãäžãããšããã°ãf㯠(1, 'A') ãè¿ã
ã»ã¯ã·ã§ã³ãªã©ã§ã¯ãèŠçŽ æ°ã«å¿ããæ§ç¯åã䜿ããªããã°ãªããªããããšãã°èŠçŽ æ°ã3ãªãã°
f x y = (,,) x y 3
-- ããã¯ä»¥äžãšç䟡ã§ãã
f x y = (x, y, 3)
ãŠãŒãã£ãªãã£é¢æ°ãšããŠcurryãšuncurryãå®çŸ©ãããŠããããããã2-tupleããåãä»ããªãã
curry id 'A' 1 -- id ('A', 1) ãšç䟡ã§ãcurry㯠('A', 1) ãè¿ã
uncurry (+) (1,42) -- (+) 1 42 ãšç䟡ã§ããã㯠1 + 42 ãšãç䟡ã§ãããããuncurryã¯43ãè¿ã
C# ã«ãããã¿ãã«
[ç·šé]C#èšèªã«ãããã¿ãã«(System.Tupleã¯ã©ã¹)ã¯.NET Framework 4.0ãããµããŒããããç·ç§°åã®ã³ã³ããã®ã²ãšã€ãCLIã§å®çŸ©ãããã¯ã©ã¹ã§ããããVisual Basic .NETã§ãåæ§ã«äœ¿çšå¯èœã§ããã
var tuple1 = new Tuple<int>(1);
var tuple2 = new Tuple<string, int>("one", 1);
ããããã®å€ã®åãåºãã¯ãItem1, Item2, ... ã«ã¢ã¯ã»ã¹ããããšã§è¡ãããPythonãšéããTupleåã§è¿ãããããšãã£ãŠè€æ°ã®æ»ãå€ãè¿ã颿°ãšã¯ãªããªãã
var tuple2 = new Tuple<string, int>("one", 1);
string word = tuple2.Item1;
int number = tuple2.Item2;
ä»ã«ãåæ§ã®ç·ç§°åãæã€èšèªã§ã¯ãåæ§ã«ããŠã¿ãã«ã䜿ãã[2]ãããããªãã
ãªããC#7.0ãããµããŒããããã¿ãã«æ§æã§ã¯ããã以åã«ååšããŠããSystem.Tupleã¯ã©ã¹ïŒåç
§åïŒã§ã¯ãªããæ°ãã«å®è£
ãããSystem.ValueTupleæ§é äœïŒå€åïŒã䜿çšãããããã«ãªã£ãŠãããããã«ããäœ¿çšæã®ã€ã³ã¹ã¿ã³ã¹åãäžèŠãšãªã£ãã
ãã®ä»ãåã¿ãã«ãã£ãŒã«ããžã®åœåïŒååä»ãã¿ãã«ïŒãåè§£æ§æïŒDeconstruct()ïŒãä»ããè€æ°ã®æ»ãå€ã®åãåãããã¿ãã«ãã®ãã®ãçŽæ¥ãžã§ããªãã¯ã®ååŒæ°ãšããŠå®£èšããããšãå¯èœãšãªããªã©ãèšèªä»æ§ã®äžéšãšããŠçµ±åãããåœ¢ã§æ±ããããã«ãªã£ãã
// ååãªãã¿ãã«
var tuple1 = ("one", 1);
string word1 = tuple1.Item1;
int number1 = tuple1.Item2;
// ååä»ãã¿ãã«
var tuple2 = (key: "one", value: 1);
string word2 = tuple2.key;
int number2 = tuple2.value;
// ã¿ãã«ã®åè§£
(string str, int num) = tuple1;
// (string, string)ã¿ãã«ãååŒæ°ãšãããžã§ããªãã¯å
Dictionary<string, (string, string)> dictionary;
TypeScript ã«ãããã¿ãã«
[ç·šé]TypeScript 1.3 ãã察å¿ããã
var tuple: [string, number] = ["one", 1];
é¢ä¿ããŒã¿ããŒã¹ã«ãããã¿ãã«
[ç·šé]é¢ä¿ããŒã¿ããŒã¹ã®çè«ã§ããé¢ä¿ã¢ãã«ã§ã¯ãã¿ãã«ïŒçµïŒãšã¯ããé¢ä¿ïŒãªã¬ãŒã·ã§ã³ïŒã衚ïŒããŒãã«ïŒ ãšããŠè¡šãããšãã®1ã€ã®è¡ã«ãããã圢åŒçã«ã¯ãäžè¿°ã®ã¿ãã«ãšåæ§ã«å±æ§åãæ·»åãšãã屿§ã®åã®çŽç©éåã®èŠçŽ ãšããŠè¡šãããã