1 00:00:00,000 --> 00:00:05,180 2 00:00:05,180 --> 00:00:05,930 Конър HARRIS: Здравейте. 3 00:00:05,930 --> 00:00:06,820 Аз съм Connor Harris. 4 00:00:06,820 --> 00:00:09,729 Аз съм CS50 CA в Харвард. 5 00:00:09,729 --> 00:00:11,270 СТИВЪН KREWSON: Аз съм Стивън Krewson. 6 00:00:11,270 --> 00:00:12,582 Аз съм TF за CS50 в Йейл. 7 00:00:12,582 --> 00:00:15,790 Конър HARRIS: И ние ще говорим за някои технологии, които може да 8 00:00:15,790 --> 00:00:18,880 искате да използвате, ако проявявате интерес по този краен проект или наистина 9 00:00:18,880 --> 00:00:20,920 нещо с музика. 10 00:00:20,920 --> 00:00:24,400 Отиваме да се съсредоточи върху първата по- език за програмиране, наречен Haskell. 11 00:00:24,400 --> 00:00:26,280 Това е функционалната език, така парадигмата 12 00:00:26,280 --> 00:00:29,620 е много различен от C или PHP или други наложителни езици 13 00:00:29,620 --> 00:00:33,450 че сте използвали вече, и по-специално на библиотека написана на Haskell 14 00:00:33,450 --> 00:00:40,240 наречено Euterpea, които могат да помогнат на хората с написването на музика функционално, 15 00:00:40,240 --> 00:00:40,780 основно. 16 00:00:40,780 --> 00:00:43,400 И Стивън ще ходиш чрез един чудесен пример за това. 17 00:00:43,400 --> 00:00:46,423 >> След това, аз ще ви запозная с нещо, наречено LillyPond, които 18 00:00:46,423 --> 00:00:48,370 е технология за наборен музика. 19 00:00:48,370 --> 00:00:50,830 Това е нещо като LaTeX за музика, ако някой от вас 20 00:00:50,830 --> 00:00:57,530 Използвал LaTeX за математика класове или други P комплект класове или това, което имате. 21 00:00:57,530 --> 00:01:00,440 И така, аз ще ви дам, отново, Примери на някои прости, че 22 00:01:00,440 --> 00:01:03,640 и ви насочи в генералът посока на някои по-добри средства. 23 00:01:03,640 --> 00:01:04,319 >> СТИВЪН KREWSON: В Освен това, ние го помислих 24 00:01:04,319 --> 00:01:06,720 ще бъде готино да се създаде малко съвети 25 00:01:06,720 --> 00:01:10,780 към тръбопровод между Euterpea генерирано MIDI файлове 26 00:01:10,780 --> 00:01:13,910 в LillyPond, затова ние предлагаме някои инструкция за скриптове 27 00:01:13,910 --> 00:01:16,310 да се направи това, че са снабдена с LillyPond 28 00:01:16,310 --> 00:01:19,160 само за да я държи с отворен код и ще получите газопровод ще. 29 00:01:19,160 --> 00:01:20,910 Конър HARRIS: Отново, ние трябва да се подчертае, 30 00:01:20,910 --> 00:01:23,100 тези две технологии, ви не е нужно да ги използват заедно. 31 00:01:23,100 --> 00:01:25,370 Те не са проектирани да работят заедно, въпреки че те се справят много добре. 32 00:01:25,370 --> 00:01:26,362 >> СТИВЪН KREWSON: Точно така. 33 00:01:26,362 --> 00:01:30,116 И напълно безплатно. 34 00:01:30,116 --> 00:01:32,240 Конър HARRIS: Значи потвърждения, просто прочетете това. 35 00:01:32,240 --> 00:01:33,406 СТИВЪН KREWSON: Надлежно отбележи. 36 00:01:33,406 --> 00:01:36,360 Благодарение на тези хора. 37 00:01:36,360 --> 00:01:39,180 Това ще се проточат само за миг. 38 00:01:39,180 --> 00:01:41,560 В процеса на инсталиране е малко по-сложно. 39 00:01:41,560 --> 00:01:45,420 Ние сме един ми прочете на GitHub че можете да да разгледаме. 40 00:01:45,420 --> 00:01:47,840 Просто ми пишете, ако имате някакви въпроси. 41 00:01:47,840 --> 00:01:52,829 Но ние ще изпълня този при допускане че това е работа за всеки. 42 00:01:52,829 --> 00:01:55,620 Конър HARRIS: И ако не можете да получите LillyPond да работи, не е голяма работа. 43 00:01:55,620 --> 00:02:00,139 Няма по-живо компилация, че ще бъдат включени, поне в моя край. 44 00:02:00,139 --> 00:02:02,930 СТИВЪН KREWSON: Haskell и LillyPond трябва и двете имат монтажници. 45 00:02:02,930 --> 00:02:08,497 Euterpea е изтеглена като пакет, така нататък и така нататък. 46 00:02:08,497 --> 00:02:10,080 Така че ние не говорим за компютърна музика. 47 00:02:10,080 --> 00:02:12,990 И това е само един много изглед 50 000 фута. 48 00:02:12,990 --> 00:02:15,700 Има няколко различни аспекти от него. 49 00:02:15,700 --> 00:02:18,120 И това е груба и е ще закрие някои подробности. 50 00:02:18,120 --> 00:02:22,090 Но можем да измислим нещо като алгоритмична състав, 51 00:02:22,090 --> 00:02:24,920 използвайки алгоритми, използване на код, за да генерира 52 00:02:24,920 --> 00:02:30,280 някакъв вид of-- може би самоподобен поредица от бележки, или може би бележки 53 00:02:30,280 --> 00:02:33,330 под някаква принуда. 54 00:02:33,330 --> 00:02:35,350 И тогава тези, които биха могли да бъдат извършва или тълкува 55 00:02:35,350 --> 00:02:38,390 с аналогови инструменти или нещо подобно. 56 00:02:38,390 --> 00:02:42,010 Но състава е направено алгоритмично. 57 00:02:42,010 --> 00:02:45,120 >> Но, разбира се, може би областта на компютърна музика или цифрова музика 58 00:02:45,120 --> 00:02:48,870 ние сме по-запознати с е цифров синтез на звук или цифров вземане на проби 59 00:02:48,870 --> 00:02:51,160 и цифров запис. 60 00:02:51,160 --> 00:02:55,650 Много от дигитални инструменти са осъществява чрез цифрова извадка. 61 00:02:55,650 --> 00:03:00,110 В действителност, ние ще се използва един от тези в под формата на стабилна библиотека шрифт по-късно. 62 00:03:00,110 --> 00:03:02,850 >> Но има и нещо, наречено цифров синтез, които се появиха 63 00:03:02,850 --> 00:03:08,650 от края на 70-те и 80-те в с Yamaha и Джон Chowning в Станфорд 64 00:03:08,650 --> 00:03:11,990 правене на FM синтез или Синтез честотна модулация, 65 00:03:11,990 --> 00:03:15,100 където имаше носител сигнал и модулиране на сигнала 66 00:03:15,100 --> 00:03:18,270 както в аудио спектър. 67 00:03:18,270 --> 00:03:22,570 Но това, което ние сме фокусирани върху днес е нещо, наречено MIDI, 68 00:03:22,570 --> 00:03:25,040 и разбира се, алгоритмична състав. 69 00:03:25,040 --> 00:03:30,940 >> Ние няма да се уреди, но ние, вместо да става да се направят някои музика, 70 00:03:30,940 --> 00:03:33,940 и след това ще се интерпретира от някои инструменти, които 71 00:03:33,940 --> 00:03:38,300 са Съответстващ на обща MIDI стандарт. 72 00:03:38,300 --> 00:03:40,830 Така че това, което е MIDI? 73 00:03:40,830 --> 00:03:45,550 Аз няма да се получи прекалено дълбоко в нея, но MIDI е протокол за предаване на данни. 74 00:03:45,550 --> 00:03:49,250 Това е един вид наръчник цяла различни компании и индустрии 75 00:03:49,250 --> 00:03:52,250 за организиране на звуци или петна. 76 00:03:52,250 --> 00:03:54,170 Така че ние ще видим, че има стандартен MIDI 77 00:03:54,170 --> 00:03:57,500 за всички различни ударни инструменти звуци и препоръки MIDI 78 00:03:57,500 --> 00:04:01,360 за всички различни видове синт или различни видове всички инструмента 79 00:04:01,360 --> 00:04:03,650 групи в един оркестър, казват. 80 00:04:03,650 --> 00:04:08,916 >> Вие вероятно сте запознат с 0 до 127 MIDI съобщения. 81 00:04:08,916 --> 00:04:12,920 A MIDI сигнал е типично един бит показва 82 00:04:12,920 --> 00:04:16,130 независимо дали става дума за данни или Статус на пакети, а след това има 83 00:04:16,130 --> 00:04:18,589 седем бита на сигнал. 84 00:04:18,589 --> 00:04:21,430 И това може да контролира всичко от обема 85 00:04:21,430 --> 00:04:25,330 на действието или налягането за конкретен ключ 86 00:04:25,330 --> 00:04:29,400 ако се представят с MIDI контролер, както и, разбира се, 87 00:04:29,400 --> 00:04:31,250 бележки. 88 00:04:31,250 --> 00:04:33,450 И разбира се, има MIDI била изключително полезна, 89 00:04:33,450 --> 00:04:37,550 защото това е начин да се жица заедно или последователно свързване 90 00:04:37,550 --> 00:04:41,570 куп MIDI хардуерни устройства. 91 00:04:41,570 --> 00:04:44,050 Имам седем или осем обратно в къщата ми. 92 00:04:44,050 --> 00:04:46,610 Той получава много сложно, но това е наистина мощен. 93 00:04:46,610 --> 00:04:47,460 И това е много стар. 94 00:04:47,460 --> 00:04:51,117 Това е от началото на 80-те години, и това е много хубаво и малки. 95 00:04:51,117 --> 00:04:51,950 Конър HARRIS: Да. 96 00:04:51,950 --> 00:04:54,230 Всички класически Nintendo видео игри, ще вероятно 97 00:04:54,230 --> 00:04:56,088 имат MIDI файлове за музика, например. 98 00:04:56,088 --> 00:04:59,550 99 00:04:59,550 --> 00:05:01,740 >> СТИВЪН KREWSON: Ето един Например от общ MIDI, 100 00:05:01,740 --> 00:05:06,520 показващ MIDI като един вид на общ протокол. 101 00:05:06,520 --> 00:05:13,280 И мисля, че можем да мислим за разлика между спецификацията 102 00:05:13,280 --> 00:05:17,830 че трябва да има нещо подобно тези инструменти звуци и действителната 103 00:05:17,830 --> 00:05:21,740 реализация на тези инструменти звуци в звука на шрифта или конкретен MIDI 104 00:05:21,740 --> 00:05:25,740 синтезатор като разликата между може би typeface-- която казва, 105 00:05:25,740 --> 00:05:30,350 като цяло, това е проектирането на този конкретен начин да представлява 106 00:05:30,350 --> 00:05:35,907 characters-- и конкретен шрифта че има определен размер и тембър, 107 00:05:35,907 --> 00:05:37,240 а има и реализация на the-- 108 00:05:37,240 --> 00:05:39,156 >> Конър HARRIS: Може би добро сравнение, ще 109 00:05:39,156 --> 00:05:43,430 е стандартът Unicode says-- тя дава номер на всеки герой, и наистина 110 00:05:43,430 --> 00:05:46,830 всеки език в света, или широк набор от скриптове на език 111 00:05:46,830 --> 00:05:51,310 в света, а след това са постановено в нещо графично 112 00:05:51,310 --> 00:05:53,710 от различни пакети с шрифтове. 113 00:05:53,710 --> 00:05:56,630 И очевидно, можеш да се сетиш MIDI като Unicode на звука. 114 00:05:56,630 --> 00:06:03,250 И това е просто един списък of-- голям поток на събития и инструменти и какво ли не, 115 00:06:03,250 --> 00:06:06,090 и вие трябва да имате отделна програма, като шрифт, 116 00:06:06,090 --> 00:06:08,537 да се направи, че в нещо, което е доловимо. 117 00:06:08,537 --> 00:06:12,360 118 00:06:12,360 --> 00:06:13,780 >> СТИВЪН KREWSON: Така че, защо Haskell? 119 00:06:13,780 --> 00:06:19,110 Haskell е функционална програмиране език, много напреднал, 120 00:06:19,110 --> 00:06:22,770 много по-различна от С, много по-различна от PHP. 121 00:06:22,770 --> 00:06:28,120 И ние ще видим, че има един лекота на функция състав в Haskell 122 00:06:28,120 --> 00:06:37,640 която ще ни позволи да бриз през композиране или пишете до, записване, 123 00:06:37,640 --> 00:06:42,160 нещо като Frere Jacques, тази проста песен, която 124 00:06:42,160 --> 00:06:46,815 има много части в него, че самостоятелно подобна или повтаряне. 125 00:06:46,815 --> 00:06:49,740 126 00:06:49,740 --> 00:06:53,250 Така че това ще бъде част от мотивацията за това защо 127 00:06:53,250 --> 00:06:59,400 ние използваме Haskell, в която функции са граждани първокласни. 128 00:06:59,400 --> 00:07:01,120 >> И аз исках да се удължи това е малко. 129 00:07:01,120 --> 00:07:08,800 Това е малко по-лесно да се отбележете Frere Jacques в Haskell. 130 00:07:08,800 --> 00:07:12,100 Но какво, ако искахме да добавите барабанна част към него? 131 00:07:12,100 --> 00:07:17,320 Какво става, ако искахме да се опитаме да направим нещо като Roland 808 или 909 барабан 132 00:07:17,320 --> 00:07:20,970 машина, където трябва около 16 различни стъпки? 133 00:07:20,970 --> 00:07:24,590 Обикновено това са мисли като 16-ти бележки. 134 00:07:24,590 --> 00:07:28,640 И вие можете да контролирате глобалното темпо, и можете да избирам 135 00:07:28,640 --> 00:07:34,620 куп различни ударни части на бас барабан, а пляскат, различни примки, 136 00:07:34,620 --> 00:07:37,540 отворени и затворени високи шапки на тези вид на канали, 137 00:07:37,540 --> 00:07:41,600 и след това можете да EQ или коригира обема им. 138 00:07:41,600 --> 00:07:45,290 >> И ние ще видим добър начин в Haskell на представляващ тази стъпка 139 00:07:45,290 --> 00:07:48,810 секвенатор с всички различни готини неща в Haskell 140 00:07:48,810 --> 00:07:53,100 можем да направим с генериране списъци и филтриране над списъци, 141 00:07:53,100 --> 00:07:56,060 картографиране над списъци, картографиране функции над списъци. 142 00:07:56,060 --> 00:07:59,530 143 00:07:59,530 --> 00:08:00,760 И един бърз извинение. 144 00:08:00,760 --> 00:08:05,300 Това е един много бегъл и прекалено бърза скица 145 00:08:05,300 --> 00:08:07,620 на някои от аспектите на Haskell и Euterpea, 146 00:08:07,620 --> 00:08:11,760 който е специфичен домейн- вграден език писмено 147 00:08:11,760 --> 00:08:14,970 в Haskell за музикални видове. 148 00:08:14,970 --> 00:08:17,350 Така че, моля да проверите кода онлайн. 149 00:08:17,350 --> 00:08:22,404 Пожар GHCI, което е най-Glasgow Haskell Compiler Interpreter. 150 00:08:22,404 --> 00:08:24,320 И аз ще се правят някои за това в малко по- 151 00:08:24,320 --> 00:08:25,880 така че можете да видите как се прави. 152 00:08:25,880 --> 00:08:31,021 >> И това ви позволява да се зареди с the-- синтаксиса е дебелото черво и след това 153 00:08:31,021 --> 00:08:31,520 командата. 154 00:08:31,520 --> 00:08:33,510 Можете да заредите във файлове. 155 00:08:33,510 --> 00:08:36,840 Можете да използвате разглеждане на тези файлове за да видите всички функции, които 156 00:08:36,840 --> 00:08:39,169 съществува в даден модул. 157 00:08:39,169 --> 00:08:43,850 И тогава, както ще видим, видове и тип класове са толкова важни в Haskell, 158 00:08:43,850 --> 00:08:48,850 така че винаги можете check-- особено ако работите в нова DSCL 159 00:08:48,850 --> 00:08:51,600 по този начин, това, което е вид музика? 160 00:08:51,600 --> 00:08:55,114 Аз знам за начин цифрено типове работят в Haskell, 161 00:08:55,114 --> 00:08:56,530 но аз не знам много за музиката. 162 00:08:56,530 --> 00:09:01,280 Но можете да се запознаете на начина, по който сме определено с помощта на този тон или тип команда 163 00:09:01,280 --> 00:09:04,577 и след това се поставят под определен функция или обект от данни. 164 00:09:04,577 --> 00:09:05,410 Конър HARRIS: Да. 165 00:09:05,410 --> 00:09:09,820 Ако си мислите, C и трясък беше hardass за видовете, 166 00:09:09,820 --> 00:09:11,230 вие нямате представа за Haskell. 167 00:09:11,230 --> 00:09:14,230 Хубавото е, че Haskell ако можете да получите вашия код за съставяне 168 00:09:14,230 --> 00:09:16,790 и ако проверките тип Haskell, това е може би прав, 169 00:09:16,790 --> 00:09:18,675 защото системата тип е толкова строг. 170 00:09:18,675 --> 00:09:20,090 >> СТИВЪН KREWSON: Да. 171 00:09:20,090 --> 00:09:21,980 Така че аз просто искам да отида through-- и отново, 172 00:09:21,980 --> 00:09:27,160 това не се прави това, той justice-- няколко от характеристиките на Haskell, че най-малко 173 00:09:27,160 --> 00:09:31,780 да си creators-- и то е създадено в края на 1980 с един куп хора, 174 00:09:31,780 --> 00:09:34,610 комисия от около 20 people-- помисли бяха важни. 175 00:09:34,610 --> 00:09:36,850 И първото нещо, което изброени в статията, че 176 00:09:36,850 --> 00:09:41,890 описано генезиса на Haskell През първите 20 години, или така 177 00:09:41,890 --> 00:09:43,390 е, че е мързелив. 178 00:09:43,390 --> 00:09:44,990 И така, какво означава това? 179 00:09:44,990 --> 00:09:49,860 >> Е, това означава, че когато имаме някакъв вид на изразяване, ние трябва да го оцени. 180 00:09:49,860 --> 00:09:54,390 И Haskell прави това по време на разговор от нужда начин или не-строг начин. 181 00:09:54,390 --> 00:09:57,250 Това е, ако имаме куп ни компоненти на изразяване, 182 00:09:57,250 --> 00:10:00,660 ние се опитваме да се забави оценката на тези съставни 183 00:10:00,660 --> 00:10:05,300 до абсолютната миналата minute-- че е, докато ние всъщност се нуждаят от тях. 184 00:10:05,300 --> 00:10:08,480 >> Така че това, което е means-- наистина страхотно, особено 185 00:10:08,480 --> 00:10:13,200 ако си мислиш за черпене на музикална стъпка секвенсер. 186 00:10:13,200 --> 00:10:16,740 Можете включете го, и да започнете използвате стъпка sequence-- 187 00:10:16,740 --> 00:10:20,010 ако някога е работил с барабан machine-- и то просто отива завинаги. 188 00:10:20,010 --> 00:10:24,650 Така че би било много хубаво, ако можем може да подражават, че в Haskell. 189 00:10:24,650 --> 00:10:31,040 И ние можем да го направим с безкрайна стойности, по-специално на безкрайни списъци. 190 00:10:31,040 --> 00:10:35,860 Това е много лесно да напишете безкраен списък в Haskell. 191 00:10:35,860 --> 00:10:39,230 Можете просто да се използва синтаксисът надолу тук, където ще видите от 1 до 3, 192 00:10:39,230 --> 00:10:42,440 извадете 3 1 точка точка, и това е един безкраен списък 193 00:10:42,440 --> 00:10:46,960 на всички природни номерата на разширяване за толкова далеч, колкото можете да си представите. 194 00:10:46,960 --> 00:10:49,925 >> Искам да се въведе концепция на гънки веднага. 195 00:10:49,925 --> 00:10:51,800 И пак, с цел на този семинар, не е 196 00:10:51,800 --> 00:10:55,770 да се запознаят с гънки в Haskell или по-високи функции ред. 197 00:10:55,770 --> 00:10:59,640 Но аз просто искам да го представим на дават точна чувство за колко странно 198 00:10:59,640 --> 00:11:03,700 Haskell е и колко мощен е той. 199 00:11:03,700 --> 00:11:08,000 И по-специално, ние ще be-- Когато правим нашите различни барабанни части, 200 00:11:08,000 --> 00:11:12,790 ние ще трябва да се манипулира списъци на числа, сгъваеми им един върху друг. 201 00:11:12,790 --> 00:11:17,290 И за да направим това, ние ще да се използва карти и гънки. 202 00:11:17,290 --> 00:11:21,770 >> Има право асоциативен кратно, което е това едно право 203 00:11:21,770 --> 00:11:26,990 here-- 1 минус количеството, 2 минус количеството, 3 минус 0. 204 00:11:26,990 --> 00:11:29,170 И синтаксиса за кратно, ви даде кратно 205 00:11:29,170 --> 00:11:34,680 базова стойност и тогава operation-- в този случай, прибавяне или изваждане. 206 00:11:34,680 --> 00:11:36,280 Аз бях показан двата случая. 207 00:11:36,280 --> 00:11:41,760 И след това има акумулатор, че натрупва над целия списък, 208 00:11:41,760 --> 00:11:46,330 прилагането на този оператор на плюс или минус, а след това натрупване. 209 00:11:46,330 --> 00:11:52,680 Така че това ще бъде the-- ако тя се нарича с кратно г плюс 0, като се започне с 0, 210 00:11:52,680 --> 00:11:54,720 тогава ние ще обобщим всички числата в този списък. 211 00:11:54,720 --> 00:11:57,134 И това е списък от 1 до 3. 212 00:11:57,134 --> 00:12:00,050 Конър HARRIS: Така да го кажем по друг начин, кратно г отнема три аргумента. 213 00:12:00,050 --> 00:12:02,540 Има една функция, която Самата отнема два аргумента, 214 00:12:02,540 --> 00:12:05,400 тогава там е на стойност стартер, а има и списък със стойности. 215 00:12:05,400 --> 00:12:08,570 И това, което правите е да приемете стартер стойност, първа стойност, 216 00:12:08,570 --> 00:12:09,850 сложете ги в функцията. 217 00:12:09,850 --> 00:12:11,607 Какво искаш да се измъкнем, вземат това, че фуражите 218 00:12:11,607 --> 00:12:13,940 в функцията на втора стойност, която можете да се измъкнем, 219 00:12:13,940 --> 00:12:16,690 вземе, че се хранят, че в функция на третата стойност. 220 00:12:16,690 --> 00:12:18,740 И тогава, ако сляза Целият този списък по този начин, 221 00:12:18,740 --> 00:12:22,970 започваш да се получи в крайна сметка някои особена стойност, която е 222 00:12:22,970 --> 00:12:25,720 от същия вид на това, което сте започнали с и от същия вид 223 00:12:25,720 --> 00:12:29,147 тъй като нещата в списъка, а след това това е в резултат на връщане кратно R. 224 00:12:29,147 --> 00:12:31,980 СТИВЪН KREWSON: Така че по-специално, те са по-високи функции за поръчки, 225 00:12:31,980 --> 00:12:34,460 защото те са като друг функция като един от аргументите. 226 00:12:34,460 --> 00:12:34,770 >> Конър HARRIS: Да. 227 00:12:34,770 --> 00:12:37,820 Ако сте използвали някои други languages-- Знам R, [недоловим] 228 00:12:37,820 --> 00:12:41,510 език има тази, наречена Намалете. 229 00:12:41,510 --> 00:12:45,460 Може да се наложи подобни функции и на други езици, що се обади 230 00:12:45,460 --> 00:12:48,160 различни неща. 231 00:12:48,160 --> 00:12:50,680 >> СТИВЪН KREWSON: И това, което е хубаво за кратно R 232 00:12:50,680 --> 00:12:53,880 в този случай е, че кратно R може да работи с безкрайни списъци. 233 00:12:53,880 --> 00:12:59,490 Така че в този отдолу, това P5 е генериране на бележките, които 234 00:12:59,490 --> 00:13:03,120 са включени в етап секвенатор за някои барабанна част, петата барабанна част, 235 00:13:03,120 --> 00:13:05,480 и може би това е една конга барабан или нещо такова. 236 00:13:05,480 --> 00:13:09,719 И това е умишлено тъп начин за написването на тази, 237 00:13:09,719 --> 00:13:11,510 но това е забавно, защото тя демонстрира много 238 00:13:11,510 --> 00:13:14,460 неща за Haskell и Euterpea. 239 00:13:14,460 --> 00:13:20,650 >> Така пъти R на този colon-- на дебелото черво е само един оператор, който избутва неща 240 00:13:20,650 --> 00:13:25,700 заедно на list-- наречена на празен списък, който е само на празни скоби. 241 00:13:25,700 --> 00:13:28,250 И аз се обаждам, че по този безкраен списък. 242 00:13:28,250 --> 00:13:31,570 Това всъщност два списъка вложат заедно тук. 243 00:13:31,570 --> 00:13:37,150 В списъка 1 запетая 6 точка точка е с 1, 6, 11, 16. 244 00:13:37,150 --> 00:13:39,750 Така Haskell-- само няколко знака, можете 245 00:13:39,750 --> 00:13:42,420 може да генерира цялата последователност от числа 246 00:13:42,420 --> 00:13:46,240 които са пет номера от друг разтягане на в безкрайността. 247 00:13:46,240 --> 00:13:49,860 И аз се добавя нищо към тази този по-кратък малко list-- 248 00:13:49,860 --> 00:13:54,370 3, 8, 21-- просто да ви покажа как може да се свързвам списъци. 249 00:13:54,370 --> 00:13:55,790 >> И тогава аз съм сгънати върху себе си. 250 00:13:55,790 --> 00:14:01,510 А това в крайна сметка просто е един вид операция идентичност, но това е безкрайна. 251 00:14:01,510 --> 00:14:06,070 И сгънете R може да направи това, защото то лениво оценява, както по-горе. 252 00:14:06,070 --> 00:14:10,582 Ако имаме 1 и 2 и 3, което можем Просто попадне отстранява цялата останалата част от него. 253 00:14:10,582 --> 00:14:12,290 Това няма да работи за минус или плюс, но това 254 00:14:12,290 --> 00:14:17,760 Ще работим за това на дебелото черво операция идентичност в списъка. 255 00:14:17,760 --> 00:14:24,620 >> И как ще се използва на практика, че ако ние има един безкрайно дълъг списък от неща? 256 00:14:24,620 --> 00:14:26,500 Е, Haskell осигурява много functions-- 257 00:14:26,500 --> 00:14:29,450 и изглежда по-под тези в собствения си time-- като вземе 258 00:14:29,450 --> 00:14:32,200 в която се казва, OK, ние сме генериране на този безкраен списък, 259 00:14:32,200 --> 00:14:35,950 но ние просто ще отнеме известно брой го И в този case-- 260 00:14:35,950 --> 00:14:38,410 ние ще видим това по-късно в нашата дръм машина code-- 261 00:14:38,410 --> 00:14:43,740 GM е просто някаква глобална променлива за броя на стъпките 262 00:14:43,740 --> 00:14:44,610 в секвенатор. 263 00:14:44,610 --> 00:14:47,630 На машините ролетни в I ти показа, че това е обикновено 16, 264 00:14:47,630 --> 00:14:51,475 но съм го реализира с 32. 265 00:14:51,475 --> 00:14:54,470 Това няма значение. 266 00:14:54,470 --> 00:15:00,230 >> Haskell е и чисто, така че има силна статично типизиране, че Конър намекнато. 267 00:15:00,230 --> 00:15:03,220 Така функции са математическата в sense-- 268 00:15:03,220 --> 00:15:06,600 те са по-математическата че те са гарантирани 269 00:15:06,600 --> 00:15:11,530 да не влезете или да промените каквито и да било променлива или да извърши вход или изход. 270 00:15:11,530 --> 00:15:14,420 Така че, ако имате функция, това е детерминирана. 271 00:15:14,420 --> 00:15:17,400 Тя винаги ще се върне на същото стойност в състоянието на програмата 272 00:15:17,400 --> 00:15:19,310 или остават същите. 273 00:15:19,310 --> 00:15:22,940 Има, разбира се, изключения монадно ' към това, но това е извън нашия обхват. 274 00:15:22,940 --> 00:15:23,900 >> Конър HARRIS: Да. 275 00:15:23,900 --> 00:15:26,946 Какво означава това, обаче, е налице са няколко важни [недоловим] 276 00:15:26,946 --> 00:15:27,820 последици от това. 277 00:15:27,820 --> 00:15:30,940 Един от тях е, че това е много лесно да се паралелизация Haskell програми. 278 00:15:30,940 --> 00:15:32,773 Защото, ако имате, се каже, че е функция на 279 00:15:32,773 --> 00:15:36,064 трябва да работят на един милион стойности, ако знаете ли, че функцията винаги ще 280 00:15:36,064 --> 00:15:39,280 дават една и съща стойност, ако те храня в определен value-- 281 00:15:39,280 --> 00:15:43,055 ако сте [недоловим] е на 1, е от 2, след това е на 3 или whatnot-- е на 1 282 00:15:43,055 --> 00:15:45,180 няма да се напише във файл или да се направи нещо 283 00:15:45,180 --> 00:15:46,850 че да промени стойността на F2. 284 00:15:46,850 --> 00:15:50,220 Можете просто да разделим тази функция на милион различни машини или милион 285 00:15:50,220 --> 00:15:54,720 различни теми, или каквото и да, получите всички отговори обратно, 286 00:15:54,720 --> 00:15:56,900 получите всички стойности на връщане гърба, а след това е всичко. 287 00:15:56,900 --> 00:15:59,780 Така много лесно да паралелизация неща. 288 00:15:59,780 --> 00:16:03,140 >> Недостатъкът е, че входния и на изхода особено 289 00:16:03,140 --> 00:16:05,720 вписват в системата за типово в много сложни начини. 290 00:16:05,720 --> 00:16:09,010 Ние няма да отида в, че точно сега, но аз Приканваме ви да разгледаме някои ресурси 291 00:16:09,010 --> 00:16:11,175 онлайн, ако искате да научите повече за това. 292 00:16:11,175 --> 00:16:13,960 293 00:16:13,960 --> 00:16:16,550 >> СТИВЪН KREWSON: Значи Типове classes-- и това 294 00:16:16,550 --> 00:16:21,610 was-- класове видове са измислени, за да се реши 295 00:16:21,610 --> 00:16:24,160 проблем на оператор претоварване. 296 00:16:24,160 --> 00:16:27,590 Така че ние искахме да има равенство между различните видове неща. 297 00:16:27,590 --> 00:16:31,040 Разбира се, бихме могли да мислим of-- равенството между числови типове 298 00:16:31,040 --> 00:16:34,720 Много е лесно да се мисли за това, но какво да кажем за равенство между списъци? 299 00:16:34,720 --> 00:16:37,610 Какво ще кажете за равенство между дървесни структури крака данни? 300 00:16:37,610 --> 00:16:43,130 И всичко това е възможно в Haskell заради тип класове. 301 00:16:43,130 --> 00:16:48,000 >> Така че, ако определят някакъв type-- данни и тук, това са музикални терени. 302 00:16:48,000 --> 00:16:50,960 Ние сме най-накрая става до известна компютърна музика. 303 00:16:50,960 --> 00:16:57,420 Така че ние имаме C, C остър, и така нататък и така нататък. 304 00:16:57,420 --> 00:17:01,080 Те принадлежат към един куп различни класове тип. 305 00:17:01,080 --> 00:17:03,510 EQ-- те принадлежат към класа на типа EQ. 306 00:17:03,510 --> 00:17:06,780 Това означава, че те подкрепят операции на половете. 307 00:17:06,780 --> 00:17:12,650 Така че можете да се прецени дали една поредица от музикални примитиви 308 00:17:12,650 --> 00:17:15,400 е същата като друга. 309 00:17:15,400 --> 00:17:17,280 >> Те принадлежат към поредния клас. 310 00:17:17,280 --> 00:17:19,479 Това означава, че има една поръчка за тях. 311 00:17:19,479 --> 00:17:27,670 D идва след C. C рязкото идва след C, както добре. 312 00:17:27,670 --> 00:17:29,840 Те принадлежат към класа покажем, което означава, че могат 313 00:17:29,840 --> 00:17:33,000 да бъде отпечатан на конзола или терминал. 314 00:17:33,000 --> 00:17:36,090 Те принадлежат към клас изброени, които 315 00:17:36,090 --> 00:17:39,770 означава, че въпреки че това са знаци, 316 00:17:39,770 --> 00:17:45,340 те имат в основата на цифровата представителство, започващи от 0 317 00:17:45,340 --> 00:17:48,960 и излизането през обаче много неща са тук, 20, или така, 318 00:17:48,960 --> 00:17:51,770 или 30 или 40, може би. 319 00:17:51,770 --> 00:17:54,259 >> Конър HARRIS: И когато имаме тип данни 320 00:17:54,259 --> 00:17:57,050 че derives-- с тази ключова дума "deriving--" определен клас тип, 321 00:17:57,050 --> 00:18:01,160 това означава, че компилаторът ще се опитам за конструиране нещо автоматично. 322 00:18:01,160 --> 00:18:05,120 Така че може би ще искате да дефиниране на качеството по различен начин. 323 00:18:05,120 --> 00:18:09,450 Вие ще искате да се определи C рязкото като равен на D плоско, например. 324 00:18:09,450 --> 00:18:11,560 С тази конструкция тук, аз не мисля, C рязкото 325 00:18:11,560 --> 00:18:14,940 и D ще бъде равен плосък, защото компилаторът автоматично ще 326 00:18:14,940 --> 00:18:19,670 рекат, всеки различен възможна стойност е различен от всеки друг. 327 00:18:19,670 --> 00:18:22,930 >> Така че е възможно да се наложи над реализации по подразбиране 328 00:18:22,930 --> 00:18:25,730 на тези видове класове. 329 00:18:25,730 --> 00:18:28,640 Отново, погледнете позоваването ако Ако искате да научите за това. 330 00:18:28,640 --> 00:18:31,767 331 00:18:31,767 --> 00:18:33,600 СТИВЪН KREWSON: И тук, в действителност, това ще 332 00:18:33,600 --> 00:18:36,930 да бъде от полза за по-късно, когато се кодира. 333 00:18:36,930 --> 00:18:42,150 Виждаме някои от операторите инфикса за пореден състав, 334 00:18:42,150 --> 00:18:46,570 успоредно състав, така и назад, тези плюсове и равни знаци 335 00:18:46,570 --> 00:18:48,620 заобиколен от колони. 336 00:18:48,620 --> 00:18:53,330 Това означава, че можем да играем тези различни музикални примитиви един след друг. 337 00:18:53,330 --> 00:18:54,590 Това е пореден състав. 338 00:18:54,590 --> 00:18:57,170 >> Или можем да ги играя в успоредно в същото време. 339 00:18:57,170 --> 00:19:05,100 Така че мога да имам музикална стойност, и след това се равнява и колони, 340 00:19:05,100 --> 00:19:09,669 инфикса паралелно оператор състав, и да ги играете като един вид акорд. 341 00:19:09,669 --> 00:19:11,460 И ние ще използваме това, когато ние комбинираме 342 00:19:11,460 --> 00:19:15,080 нашата барабанна част с нашите Малко Frere Jacques песен 343 00:19:15,080 --> 00:19:19,460 да играят тези две поредици от музикални стойности в същото време. 344 00:19:19,460 --> 00:19:24,520 345 00:19:24,520 --> 00:19:29,250 >> Козина is-- Curry последно Име на Haskell Къри, които 346 00:19:29,250 --> 00:19:31,850 изображението Haskell е кръстен. 347 00:19:31,850 --> 00:19:34,330 И това ни позволява хубаво елегантност, когато сме 348 00:19:34,330 --> 00:19:36,880 писмено всички тези различни функции или филтри, че ние сме 349 00:19:36,880 --> 00:19:39,330 Ще бъде картографиране над нашите списъци. 350 00:19:39,330 --> 00:19:42,810 Функция на две arguments-- е на х и y-- 351 00:19:42,810 --> 00:19:46,630 може да бъде представена като е от X прилага Y. 352 00:19:46,630 --> 00:19:49,800 Така че това е функция на един аргумент, който се връща 353 00:19:49,800 --> 00:19:51,240 друга функция на един аргумент. 354 00:19:51,240 --> 00:19:56,962 Така че това означава, че ние може да присвоите функция е на х над списъка на у му. 355 00:19:56,962 --> 00:19:58,920 Конър HARRIS: Искате ли да дам един пример за това? 356 00:19:58,920 --> 00:19:59,836 СТИВЪН KREWSON: Да. 357 00:19:59,836 --> 00:20:05,390 Имам един пример тук от някои от нещата, които ще пишат. 358 00:20:05,390 --> 00:20:10,500 Така репликира 2-- добре, репликира ще вземе 359 00:20:10,500 --> 00:20:13,040 една стойност, която е колко пъти, за да възпроизвеждат нещо, 360 00:20:13,040 --> 00:20:16,690 и след това ще отнеме value-- Обикновено списък или нещо такова. 361 00:20:16,690 --> 00:20:23,450 Така че тук, ние сме картографиране репликира 2 над друг списък. 362 00:20:23,450 --> 00:20:27,440 >> Така че, ако ние карта репликира 2, ако ние репликира 2 се прилага 363 00:20:27,440 --> 00:20:31,890 на първия елемент на тази list-- и това са списъци на музикалното phrases-- 364 00:20:31,890 --> 00:20:37,650 ще произвежда два от "можете sleeping--" така спиш, спиш. 365 00:20:37,650 --> 00:20:40,040 Така че сега ние имаме две. 366 00:20:40,040 --> 00:20:42,570 Но точно копие нужни двама аргументи, а защото ние сме 367 00:20:42,570 --> 00:20:47,100 козина и след това картографиране, ние може да представлява точно копие 2 368 00:20:47,100 --> 00:20:52,310 като са били върнати, като функция на една argument-- просто имитиране на два пъти. 369 00:20:52,310 --> 00:20:57,010 И тогава ние кандидатствате, че на всеки елемент от този списък на фрази. 370 00:20:57,010 --> 00:21:01,900 >> И Concat е Haskell операция за изправяне списък. 371 00:21:01,900 --> 00:21:04,400 Защото точно копие 2 воля съставят списък на списъци. 372 00:21:04,400 --> 00:21:06,660 И това е тази междинна форма тук. 373 00:21:06,660 --> 00:21:10,365 И така, тогава ние можем да CONCAT или изравнявам, че два пъти. 374 00:21:10,365 --> 00:21:12,240 Конър HARRIS: По-прост пример на кожи, 375 00:21:12,240 --> 00:21:15,323 ако искате да си представите е like-- е просто умножение функция, която използва две 376 00:21:15,323 --> 00:21:16,840 аргументи и връща техния продукт. 377 00:21:16,840 --> 00:21:19,320 Така че, ако имате е 4 5, това е 20. 378 00:21:19,320 --> 00:21:22,670 Но може да се мисли за това като also-- имате функция е 4 379 00:21:22,670 --> 00:21:25,560 че приема аргумент, и се връща четири пъти тази argument-- просто 380 00:21:25,560 --> 00:21:27,870 частично приложение, което само един аргумент 4. 381 00:21:27,870 --> 00:21:31,182 И ако се хранят е на 4 5, която ще ви даде 20. 382 00:21:31,182 --> 00:21:32,890 И това е по-прост пример на кожи. 383 00:21:32,890 --> 00:21:34,473 Това е обикновено един от тези учебници. 384 00:21:34,473 --> 00:21:38,860 385 00:21:38,860 --> 00:21:42,110 >> СТИВЪН KREWSON: Lambda изрази или анонимни функции 386 00:21:42,110 --> 00:21:47,330 са друг Haskell отличителен белег. 387 00:21:47,330 --> 00:21:51,242 Така че, ако ние трябва да привличам функция малък живот копие, 388 00:21:51,242 --> 00:21:52,950 но казват, че не е в стандартната библиотека, 389 00:21:52,950 --> 00:21:56,150 можем да използваме синтаксис подобно на следното. 390 00:21:56,150 --> 00:21:58,730 И ние ще бриз над това. 391 00:21:58,730 --> 00:22:02,160 Едно нещо, което вие ще видите много в дръм машина се правим на повиквания 392 00:22:02,160 --> 00:22:05,790 до нещо, наречено филтър, който като преди, 393 00:22:05,790 --> 00:22:08,185 е картографиране на функция над списък, но това е 394 00:22:08,185 --> 00:22:10,260 картографиране на булева функция. 395 00:22:10,260 --> 00:22:13,390 >> Така че ние имаме тук един пример на едно анонимно 396 00:22:13,390 --> 00:22:19,150 дефинирани Булева функция, която просто отнема няколко стойности. 397 00:22:19,150 --> 00:22:22,990 Това не е точно казано анонимна функция. 398 00:22:22,990 --> 00:22:25,850 Но това е да определи с че синтаксис за краткост, 399 00:22:25,850 --> 00:22:28,007 и това просто отнема х модул, N- 400 00:22:28,007 --> 00:22:28,840 Конър HARRIS: Да. 401 00:22:28,840 --> 00:22:31,330 Така е е функция на два аргумента п и р 402 00:22:31,330 --> 00:22:35,440 която връща функция, която от своя страна е функция на един аргумент, а именно х. 403 00:22:35,440 --> 00:22:38,815 404 00:22:38,815 --> 00:22:40,690 СТИВЪН KREWSON: I горепосочените оператори инфикса. 405 00:22:40,690 --> 00:22:42,642 Какви са инфикса оператори? 406 00:22:42,642 --> 00:22:45,710 Е, инфикса оператори са на нормален начин ние представляваме операции, 407 00:22:45,710 --> 00:22:49,910 се каже, в mathematics-- 2 плюс 2 вместо оператора плюс 408 00:22:49,910 --> 00:22:51,202 и след това два аргумента 2 и 2. 409 00:22:51,202 --> 00:22:53,701 Конър HARRIS: Тя се нарича обратен полски нотация, която е 410 00:22:53,701 --> 00:22:55,330 термин, аз се съмнявам някой от вас да знае. 411 00:22:55,330 --> 00:22:56,288 >> СТИВЪН KREWSON: Точно така. 412 00:22:56,288 --> 00:22:58,290 Обратните Полски или префикс нотация. 413 00:22:58,290 --> 00:23:01,412 Но Haskell реши да използвате инфикса оператори. 414 00:23:01,412 --> 00:23:03,120 Така че това са някои от потребителски тези, които 415 00:23:03,120 --> 00:23:07,770 са определени за Euterpea DSCL в Haskell. 416 00:23:07,770 --> 00:23:10,730 Така че това е пореден състав. 417 00:23:10,730 --> 00:23:16,340 Това е паралелен състав и този се съкращава паралелно състав. 418 00:23:16,340 --> 00:23:18,710 И ние ще се нуждаем от това Нашият дръм машина, 419 00:23:18,710 --> 00:23:22,640 защото ние ще използваме последната оператор, в това малко кортеж има 420 00:23:22,640 --> 00:23:26,330 да играе на барабана машината заедно Нашият Frere Jacques песен. 421 00:23:26,330 --> 00:23:28,650 И нашата дръм машина е ще бъде безкраен. 422 00:23:28,650 --> 00:23:30,920 Той просто играе завинаги. 423 00:23:30,920 --> 00:23:32,692 Но Frere Jacques песента не е така. 424 00:23:32,692 --> 00:23:33,510 Това не е толкова дълго. 425 00:23:33,510 --> 00:23:36,610 Това е само няколко бара. 426 00:23:36,610 --> 00:23:43,030 Така че ние трябва да се спре на барабана машина като Веднага след като по-кратък музикален стойност идва 427 00:23:43,030 --> 00:23:43,700 към своя край. 428 00:23:43,700 --> 00:23:46,980 И това infixed оператор е супер полезно с това. 429 00:23:46,980 --> 00:23:50,090 >> И въвирам нотация като това е вид хубаво, 430 00:23:50,090 --> 00:23:57,095 защото казват, че имате функция като цитат, който дава дивизия число 431 00:23:57,095 --> 00:24:01,010 от х от нещо else-- Съжалявам, че трябва да бъде и б. 432 00:24:01,010 --> 00:24:04,740 Можете да го напиша като цитат на б. 433 00:24:04,740 --> 00:24:09,670 Така че, ако put-- елемент е друг пример за това. 434 00:24:09,670 --> 00:24:14,730 х елемент по някакъв списък, ако сложите то в Backticks, можете да го използвате. 435 00:24:14,730 --> 00:24:20,400 Въпреки, че това не е символ като плюс или минус или времена, 436 00:24:20,400 --> 00:24:24,630 можете да използвате името на една функция като тази в Backticks 437 00:24:24,630 --> 00:24:27,045 като оператор пъхам, което е много готино. 438 00:24:27,045 --> 00:24:29,670 Конър HARRIS: Отново, това е просто синтактична захар, наистина. 439 00:24:29,670 --> 00:24:32,310 Това не засяга същността на език. 440 00:24:32,310 --> 00:24:37,440 >> СТИВЪН KREWSON: Така ние виждаме тук за последна фраза на нашия Frere Jacques песни, 441 00:24:37,440 --> 00:24:45,740 Играх някои малки акорди или трети помощта на паралелно състава 442 00:24:45,740 --> 00:24:46,240 оператор. 443 00:24:46,240 --> 00:24:50,680 444 00:24:50,680 --> 00:24:54,950 Това е друг начин да се каже някои от това, което току-що казаха. 445 00:24:54,950 --> 00:24:59,986 Така че можете да карта функции на един аргумент над списъци. 446 00:24:59,986 --> 00:25:02,860 Конър HARRIS: Отново препратки за Haskell-- уводните учебниците 447 00:25:02,860 --> 00:25:04,680 ще имате всичко това в него. 448 00:25:04,680 --> 00:25:07,790 >> СТИВЪН KREWSON: Така че тук е доста ключова линия на крачка секвенатор 449 00:25:07,790 --> 00:25:12,820 ние ще разгледаме в използването списък с разбиране. 450 00:25:12,820 --> 00:25:17,810 И ние виждаме тук е, че елемент в фиксиран оператор в гърба кавички. 451 00:25:17,810 --> 00:25:23,030 Така че, ако X е елемент от списъка на х, тогава ние ще се обаждат PERC функции. 452 00:25:23,030 --> 00:25:25,100 Така Perc е просто функция перкусии. 453 00:25:25,100 --> 00:25:30,200 Отнема известно стойност стр това е част от ограничената набор от всички 454 00:25:30,200 --> 00:25:35,310 различните звуци ударни които видяхме в предишния слайд, 455 00:25:35,310 --> 00:25:38,840 и след това се дава, че продължителност на една четвърт нота. 456 00:25:38,840 --> 00:25:43,190 Иначе тя му дава QNR и QNR е само една четвърт нота почивка. 457 00:25:43,190 --> 00:25:44,970 >> Така че това е изграждането на нещо хубаво. 458 00:25:44,970 --> 00:25:52,110 Имаме списък с елементи, и ние ще контур по някои списък от едно 459 00:25:52,110 --> 00:25:54,540 до максималната стойност на нашата стъпка секвенсер. 460 00:25:54,540 --> 00:25:58,290 И когато сме на по-специално аз в този списък от едно до максималната стойност, 461 00:25:58,290 --> 00:26:02,970 ако това аз е член на тази съвкупност, създадена в тази функция, 462 00:26:02,970 --> 00:26:06,040 добре, тогава можем да го включите в перкусии бележка. 463 00:26:06,040 --> 00:26:10,960 В противен случай, ние просто играят почивка, която е да се каже, че ние просто мълчи. 464 00:26:10,960 --> 00:26:16,050 И ние можем да видим, че тук в този списък с разбиране синтаксис, 465 00:26:16,050 --> 00:26:20,030 х е населена с това списък конструирана една 466 00:26:20,030 --> 00:26:22,462 на световната размера на секвенатор. 467 00:26:22,462 --> 00:26:23,295 Конър HARRIS: Да. 468 00:26:23,295 --> 00:26:26,340 Основния синтаксис за списък схващания е 469 00:26:26,340 --> 00:26:30,810 скоба, стойност, включваща някои променливи, бар, 470 00:26:30,810 --> 00:26:34,260 възможни стойности на променливите себе си, затворена скоба. 471 00:26:34,260 --> 00:26:38,545 И ако сте направили избран строител нотация в каквато и да е математика клас, 472 00:26:38,545 --> 00:26:45,999 може да са създали такава 2n че п е в или п е в Z. 473 00:26:45,999 --> 00:26:48,290 Подобна thing-- тази бройна система е трябвало да бъде показателен 474 00:26:48,290 --> 00:26:49,630 на тази математическа нотация. 475 00:26:49,630 --> 00:26:51,880 СТИВЪН KREWSON: И вие можете да прилага множество предикати 476 00:26:51,880 --> 00:26:56,250 и множество филтри в списък разбиране, което е доста приятно. 477 00:26:56,250 --> 00:27:01,800 Алгебрична имоти-- ние Няма да се бавим дълго тук. 478 00:27:01,800 --> 00:27:04,840 Там не е добра идея в Haskell или добър, очевидно понятие 479 00:27:04,840 --> 00:27:10,720 за това как да се вземат, да речем, по подразбиране параметър на функция или нещо такова. 480 00:27:10,720 --> 00:27:13,370 В Python, това е доста лесно. 481 00:27:13,370 --> 00:27:18,460 Можете просто да се каже със равнява на декларацията на функцията, 482 00:27:18,460 --> 00:27:21,420 стойност по подразбиране в При нито се доставя. 483 00:27:21,420 --> 00:27:27,010 >> В Haskell, бихте могли може би използвате може би, може би тип, 484 00:27:27,010 --> 00:27:32,190 който взема или нищо или стойност от тип просто. 485 00:27:32,190 --> 00:27:38,630 Така че ние се възползват от тази в барабана машина за да ни позволи да се даде избор на обема 486 00:27:38,630 --> 00:27:40,730 параметри на всяка от частите барабан. 487 00:27:40,730 --> 00:27:46,160 488 00:27:46,160 --> 00:27:54,680 Така, че ни дава начин да има EQ или обем на определен канал. 489 00:27:54,680 --> 00:27:56,440 >> Конър HARRIS: В други примери Haskell, 490 00:27:56,440 --> 00:28:00,450 Може да видите може да бъде използван за функции, които могат да се провалят. 491 00:28:00,450 --> 00:28:03,470 Това е една обща. 492 00:28:03,470 --> 00:28:07,010 >> СТИВЪН KREWSON: И вие можете да доставяме някакво съобщение за грешка, както е по подразбиране. 493 00:28:07,010 --> 00:28:11,020 И това е особено полезно, когато правиш на I / O в Haskell. 494 00:28:11,020 --> 00:28:12,044 Това може да бъде трикове. 495 00:28:12,044 --> 00:28:13,960 Конър HARRIS: Или за Подобен пример, мисля, 496 00:28:13,960 --> 00:28:17,460 на функция, която включва разделяне на параметър, който може да бъде 0. 497 00:28:17,460 --> 00:28:20,020 И тази функция би могъл се върне, може би нещо такова. 498 00:28:20,020 --> 00:28:22,802 Така че, ако има няма разделение с 0, тя ще се върне точно каквото. 499 00:28:22,802 --> 00:28:25,010 И ако има разделяне с 0, тя ще се върне нищо 500 00:28:25,010 --> 00:28:26,910 като начин за сигнализация грешката. 501 00:28:26,910 --> 00:28:30,330 Тъй като една последица от Много строг пишете на Haskell 502 00:28:30,330 --> 00:28:34,100 е, че няма real-- изключения са неудобни, общо взето, 503 00:28:34,100 --> 00:28:36,160 обработка на грешки е неудобно. 504 00:28:36,160 --> 00:28:39,440 И това е една много общ начин да го направите. 505 00:28:39,440 --> 00:28:42,990 >> СТИВЪН KREWSON: Така че сега ние получаваме до друго нещо, оказващ влияние 506 00:28:42,990 --> 00:28:49,160 за Haskell, която е модел съвпадение и функционални дефиниции. 507 00:28:49,160 --> 00:28:53,390 Аз ви показахме в последния слайд декларация за последователност стъпка 508 00:28:53,390 --> 00:28:58,170 функция, която пое може би стойност, След едно цяло число, а след това списък с цели числа, 509 00:28:58,170 --> 00:29:03,850 след това се връща последователност от музикални стойности има анотирани 510 00:29:03,850 --> 00:29:05,375 както с катран и обем. 511 00:29:05,375 --> 00:29:08,030 512 00:29:08,030 --> 00:29:11,820 >> Така че тези три аргументи могат да бъдат модел съвпадащи по следния начин. 513 00:29:11,820 --> 00:29:16,660 И ние винаги искате да бъдете сигурни, за да направя база случай или при излизане на първо място. 514 00:29:16,660 --> 00:29:19,690 И тези долни просто може да се интерпретира 515 00:29:19,690 --> 00:29:22,340 да означава всяка стойност, която е там. 516 00:29:22,340 --> 00:29:26,580 Така че, ако ние ще ви се обади, за да се засили последователността с някаква стойност, някаква друга стойност, 517 00:29:26,580 --> 00:29:32,210 и след това на празна списъка, това, което искаме за да се върнете е само тишина, почивка 0. 518 00:29:32,210 --> 00:29:35,110 >> И вместо, че е празен списък или 0, 519 00:29:35,110 --> 00:29:38,150 това е една почивка 0, защото ние сме занимаващи се с типа музика, 520 00:29:38,150 --> 00:29:43,230 и празния списък на музиката тип е просто почивка на не по продължителност. 521 00:29:43,230 --> 00:29:45,680 Това не е музика. 522 00:29:45,680 --> 00:29:51,460 И тогава ние да видим дали можем да получите една стъпка последователност с обем за аргумент обем, 523 00:29:51,460 --> 00:29:57,290 р за предпазна мярка инструмент аргумент, а след това списък на х в. 524 00:29:57,290 --> 00:29:58,360 >> Тогава ние правим някои неща. 525 00:29:58,360 --> 00:30:01,290 По-специално, ние прилагаме този списък с разбиране, 526 00:30:01,290 --> 00:30:05,700 и ние да изпълнява някои операции на стойност може би 527 00:30:05,700 --> 00:30:10,050 да го превърне в числова стойност, така че След това могат да бъдат изброени и се използва 528 00:30:10,050 --> 00:30:12,300 за да изберете инструмента. 529 00:30:12,300 --> 00:30:16,730 Отново, това е малко по- битов умишлено inconcise 530 00:30:16,730 --> 00:30:20,580 само за да покаже всички странни неща можете да направите в Haskell, колкото 531 00:30:20,580 --> 00:30:23,170 да разгледаме това по свой собствен път. 532 00:30:23,170 --> 00:30:23,802 >> Всичко е наред. 533 00:30:23,802 --> 00:30:26,010 Така че ние сме най-накрая стигне до правят това, което ние тръгнахме да правим, 534 00:30:26,010 --> 00:30:28,820 която е да направи някои компютърна музика. 535 00:30:28,820 --> 00:30:32,250 Така че ние ще се опитаме да направи Frere Jacques песента. 536 00:30:32,250 --> 00:30:35,220 Така че има колко фрази в Frere Жак? 537 00:30:35,220 --> 00:30:38,790 538 00:30:38,790 --> 00:30:39,680 Four. 539 00:30:39,680 --> 00:30:40,460 Страхотен. 540 00:30:40,460 --> 00:30:42,490 И това, което е хубаво е, че всички те са се повтаря 541 00:30:42,490 --> 00:30:46,990 същото количество от време, което е два. 542 00:30:46,990 --> 00:30:50,730 >> Така че ние имаме четири фрази всеки повтаря два пъти. 543 00:30:50,730 --> 00:30:53,590 И по-специално, те са в един кръг. 544 00:30:53,590 --> 00:30:55,340 И има много, много начини за изпълнение 545 00:30:55,340 --> 00:30:57,520 кръгла, че може да бъде забавно да се направи. 546 00:30:57,520 --> 00:31:00,260 Правил съм го в доста прост начин тук, 547 00:31:00,260 --> 00:31:05,760 която е само за да construct-- линията функция отнема списък на музикални стойности 548 00:31:05,760 --> 00:31:10,390 и тя се превръща в пореден състав чрез прилагане, които последователно състав 549 00:31:10,390 --> 00:31:13,000 оператор. 550 00:31:13,000 --> 00:31:19,540 >> И тогава аз се забави различните части като ги започне с почивка. 551 00:31:19,540 --> 00:31:22,770 Така че аз се започне с почивка от две мерки, и след това почивка от четири мерки, 552 00:31:22,770 --> 00:31:26,160 и след това почивка от шест мерки, а след това на кръг 553 00:31:26,160 --> 00:31:32,290 работи, както всички знаем, тази песен. 554 00:31:32,290 --> 00:31:37,180 Виждаме два анотации или модификации на музикални стойности 555 00:31:37,180 --> 00:31:43,150 които се съдържат в това последователно подреждане на музикални елементи. 556 00:31:43,150 --> 00:31:44,810 Имаме обем добавка. 557 00:31:44,810 --> 00:31:48,960 Това е функция, за да поясняват музика с определен обем. 558 00:31:48,960 --> 00:31:51,320 Това е един добър пример на сигнал бягане MIDI 559 00:31:51,320 --> 00:31:57,510 от 0 до 127, седем бита информация, която може да се проведе. 560 00:31:57,510 --> 00:32:00,650 >> И then-- го видяхме много Накратко, но общото MIDI 561 00:32:00,650 --> 00:32:02,310 списък на всички различни инструменти. 562 00:32:02,310 --> 00:32:04,450 И там не е цяло много от тях. 563 00:32:04,450 --> 00:32:11,230 Ако използвате цифров аудио работна станция, като Ableton на живо или Pro Tools, 564 00:32:11,230 --> 00:32:17,560 има изключително широк кръг на синтезатори и VST инструменти. 565 00:32:17,560 --> 00:32:21,510 Но само стандарта MIDI има няколко, или няколко десетки. 566 00:32:21,510 --> 00:32:22,799 И някои от тях са смешни. 567 00:32:22,799 --> 00:32:25,840 Мислех, че ще е забавно, ако играхме инструмента инструмента MIDI 568 00:32:25,840 --> 00:32:30,550 хеликоптер, и след това следващия път през кръга, 569 00:32:30,550 --> 00:32:37,980 направихме подложка синт, а след това на това сълзливо преднината квадратна вълна синт, 570 00:32:37,980 --> 00:32:44,240 и след това да изразят тиня, които са по- малко неясно за моя лош MIDI 571 00:32:44,240 --> 00:32:46,410 синтезатор, но те OK. 572 00:32:46,410 --> 00:32:50,030 >> И тогава ние виждаме това нека и по синтаксис от Haskell, 573 00:32:50,030 --> 00:32:54,030 и след това ние играем всички тези части заедно 574 00:32:54,030 --> 00:32:56,265 с паралелно оператора състав. 575 00:32:56,265 --> 00:33:00,260 576 00:33:00,260 --> 00:33:02,296 И може би бихме могли да покажем някои от това. 577 00:33:02,296 --> 00:33:07,674 578 00:33:07,674 --> 00:33:08,340 Ето кода. 579 00:33:08,340 --> 00:33:14,960 И можете да видите в C, щеше да има по- Много от гърлото клиринг и настройка 580 00:33:14,960 --> 00:33:19,760 кода на маса, преди да биха могли да правят музика като тази. 581 00:33:19,760 --> 00:33:22,080 Или всеки друг програмиране език, щеше вероятно 582 00:33:22,080 --> 00:33:27,210 Трябва да си взаимодействат с някакъв вид библиотека или API и настроите всичко, 583 00:33:27,210 --> 00:33:28,725 и след това ще трябва да се почисти. 584 00:33:28,725 --> 00:33:33,810 Но тук, в Haskell е, мисля, веднъж като получите цаката на него, невероятно 585 00:33:33,810 --> 00:33:35,770 разбираема и много изразителен. 586 00:33:35,770 --> 00:33:38,930 587 00:33:38,930 --> 00:33:43,240 Така че там е изпълнението на Frere Jacques. 588 00:33:43,240 --> 00:33:43,740 Всичко е наред. 589 00:33:43,740 --> 00:33:47,557 Сега искаме да добавим и перкусии, и това е малко по-объркана. 590 00:33:47,557 --> 00:33:49,015 Така че нека да погледнем на слайдовете. 591 00:33:49,015 --> 00:33:56,880 592 00:33:56,880 --> 00:34:00,540 Така че голямата идея е да се направи куп списъци или части. 593 00:34:00,540 --> 00:34:04,140 По изложените ролетни в машини, има са обикновено около може би осем 594 00:34:04,140 --> 00:34:08,670 10 ритъмни или ударни части. 595 00:34:08,670 --> 00:34:10,159 И след това да използвате един куп техники. 596 00:34:10,159 --> 00:34:14,889 И ние говорихме за these-- използвайки гънки, филтри, ламбда функции, 597 00:34:14,889 --> 00:34:19,429 картирани над списъци за генериране на стойности в някои от 1 до R, R е 16, 598 00:34:19,429 --> 00:34:20,699 или 32 стъпки в секвенатор. 599 00:34:20,699 --> 00:34:23,810 600 00:34:23,810 --> 00:34:29,920 >> И след това, ако има стойност в този списък тъй като ние сме минава през секвенатор, 601 00:34:29,920 --> 00:34:34,190 минава през него отново и свършила, тя се превръща в тази бележка, 602 00:34:34,190 --> 00:34:36,060 и че пробата получава задейства. 603 00:34:36,060 --> 00:34:42,810 604 00:34:42,810 --> 00:34:47,110 Това са всички различни странни начини Аз дойдох с да генерира бележки. 605 00:34:47,110 --> 00:34:48,940 Опитайте го на собствения си полу сума. 606 00:34:48,940 --> 00:34:50,360 Тя ще звучи готино. 607 00:34:50,360 --> 00:34:53,066 608 00:34:53,066 --> 00:34:54,690 Time позволява, ще мине през това. 609 00:34:54,690 --> 00:34:59,200 Но за сега, предполагам ние трябва демо, което имаме. 610 00:34:59,200 --> 00:35:01,380 Да се ​​надяваме, това върви OK. 611 00:35:01,380 --> 00:35:02,670 >> Така че това е GHCI. 612 00:35:02,670 --> 00:35:06,580 613 00:35:06,580 --> 00:35:09,121 И ние ще се зареди файл Имам наречени song.lhs, 614 00:35:09,121 --> 00:35:10,620 която е файла аз просто ти показах. 615 00:35:10,620 --> 00:35:11,470 ОК страхотно. 616 00:35:11,470 --> 00:35:15,010 Както Конър каза по-рано, тя съставена, тя проверява типа, 617 00:35:15,010 --> 00:35:18,380 за да мога да дишам много по-лесно. 618 00:35:18,380 --> 00:35:20,010 Това няма да се взриви на мен. 619 00:35:20,010 --> 00:35:22,720 >> Аз исках да ти покажа нещо полезно. 620 00:35:22,720 --> 00:35:25,900 Можете да видите, че модул зареден нарича 50. 621 00:35:25,900 --> 00:35:28,240 Можете да разглеждате този модул. 622 00:35:28,240 --> 00:35:32,092 И това е толкова хубаво около doing-- може би това, което 623 00:35:32,092 --> 00:35:34,550 което правиш в Haskell не е призова за разработка на софтуер, 624 00:35:34,550 --> 00:35:36,980 но можете да направите много забавни неща по своему. 625 00:35:36,980 --> 00:35:42,410 И на работния процес е много хубаво като в сравнение с много други езици, 626 00:35:42,410 --> 00:35:45,872 защото можете да видите в един наистина четлив начин какво се случва. 627 00:35:45,872 --> 00:35:47,830 Така ние виждаме, че имаме всички тези фрази, които 628 00:35:47,830 --> 00:35:53,760 са списъци от музикални терени, а след това ние изгради тези нагоре в нещо по-голямо, 629 00:35:53,760 --> 00:35:55,220 който е музика песен. 630 00:35:55,220 --> 00:35:58,450 Това е музикално устройство. 631 00:35:58,450 --> 00:36:05,545 И тогава можем да играем всичко това с функция, наречена игра музика. 632 00:36:05,545 --> 00:36:09,040 Можете да видите, че тук долу. 633 00:36:09,040 --> 00:36:11,310 Което е просто да играя. 634 00:36:11,310 --> 00:36:15,040 >> Аз трябва say-- аз не говоря за този знак за долар, който е навсякъде. 635 00:36:15,040 --> 00:36:17,980 Dollar знак е друг оператор пъхам. 636 00:36:17,980 --> 00:36:22,500 Но това е най-ниската предимство на всеки оператор, който ефективно 637 00:36:22,500 --> 00:36:24,960 означава, че всичко от лявата страна на знака за долар 638 00:36:24,960 --> 00:36:28,460 и правото на знака за долар, ние ще се оценява преди това. 639 00:36:28,460 --> 00:36:31,430 Така че това е нещо като друг начин за добавяне скоби. 640 00:36:31,430 --> 00:36:33,980 641 00:36:33,980 --> 00:36:36,220 >> Конър HARRIS: Това е основно функция състав. 642 00:36:36,220 --> 00:36:40,026 И той гарантира, че вие ​​не have-- ако имате функции от двете страни или въвирам 643 00:36:40,026 --> 00:36:42,900 оператори от двете страни, те няма сдружават през него и ще ви даде 644 00:36:42,900 --> 00:36:46,030 неочаквани резултати. 645 00:36:46,030 --> 00:36:49,790 >> СТИВЪН KREWSON: Така че ние can-- използвайки, че можем да се обадите. 646 00:36:49,790 --> 00:36:51,415 На първо място, ние ще го играе без барабаните. 647 00:36:51,415 --> 00:37:00,330 648 00:37:00,330 --> 00:37:03,170 Това е хеликоптерът, хеликоптера MIDI. 649 00:37:03,170 --> 00:37:05,495 >> [За възпроизвеждане на музика] 650 00:37:05,495 --> 00:37:08,525 651 00:37:08,525 --> 00:37:09,525 Там е квадратна вълна. 652 00:37:09,525 --> 00:37:24,520 653 00:37:24,520 --> 00:37:25,490 Тиня на глас. 654 00:37:25,490 --> 00:37:27,630 И наистина може да полудява с това. 655 00:37:27,630 --> 00:37:30,872 Взех доста проста, защото знаех, че не трябва да отхапе 656 00:37:30,872 --> 00:37:31,830 повече, отколкото можех да дъвче. 657 00:37:31,830 --> 00:37:36,460 Просто я държи доста проста да покаже основните идеи. 658 00:37:36,460 --> 00:37:39,952 Но тогава аз бях като, ние сме Трябва да се добавят някои барабани към това. 659 00:37:39,952 --> 00:37:41,910 Просто защото това е малко непроницаема, 660 00:37:41,910 --> 00:37:45,790 и аз не използвайте Името на части барабан, 661 00:37:45,790 --> 00:37:49,490 I картирани them--, защото те са част от които номерираните клас, 662 00:37:49,490 --> 00:37:51,500 Аз ги съпоставена с цели числа. 663 00:37:51,500 --> 00:37:53,120 Един от тях е като бас барабан. 664 00:37:53,120 --> 00:37:54,370 Нулева е, както добре. 665 00:37:54,370 --> 00:37:56,000 Seven е висока шапка. 666 00:37:56,000 --> 00:38:00,920 И предвидени в тук, където функции стават малко по-случайни, 667 00:38:00,920 --> 00:38:02,100 те са като конга барабани. 668 00:38:02,100 --> 00:38:08,360 >> Така че, ако мислите, че може би about-- забавен начин да се приложат дръм машина 669 00:38:08,360 --> 00:38:12,830 е да се използва много подреден модели на вашия бас барабан. 670 00:38:12,830 --> 00:38:17,640 Така например, за Филтриране през на списък с всичко, което се дава обратно 671 00:38:17,640 --> 00:38:20,590 1, когато е взето модул 04. 672 00:38:20,590 --> 00:38:27,190 Така че мога да получа 1, 5, 9, 13, така че това 17-- е първият ритъма на всяка мярка. 673 00:38:27,190 --> 00:38:32,860 >> И тогава това е същото нещо се размърда в два етапа. 674 00:38:32,860 --> 00:38:33,850 Така че това е нестандартна. 675 00:38:33,850 --> 00:38:37,480 Така че това ще бъде нещо като висока шапка. 676 00:38:37,480 --> 00:38:39,640 И след това отново, тук долу, това е малко случаен, 677 00:38:39,640 --> 00:38:41,080 защото правим конга барабани. 678 00:38:41,080 --> 00:38:44,180 И аз имам някои маракаси тук, също. 679 00:38:44,180 --> 00:38:50,280 >> Така че мога да се обадя играта на дръм машина, но това ще продължи вечно, 680 00:38:50,280 --> 00:38:53,700 и тя може да започне измъкна нагоре всички паметта в моята система. 681 00:38:53,700 --> 00:38:57,090 Така че аз ще се обадя на тази функция възпроизвеждате музика, която, както ще видим, 682 00:38:57,090 --> 00:39:02,020 използвате скъсяване паралелно състав да играем нашата малка Frere Jacques песен 683 00:39:02,020 --> 00:39:04,200 заедно с този странен дръм машина. 684 00:39:04,200 --> 00:39:06,190 Така че нека да разгледаме. 685 00:39:06,190 --> 00:39:10,920 И моля, не се подобри в моя подреждане на всички части на барабаните. 686 00:39:10,920 --> 00:39:13,375 Не е моята специалност, но аз имаше много забавно да го прави. 687 00:39:13,375 --> 00:39:17,678 688 00:39:17,678 --> 00:39:20,654 >> [За възпроизвеждане на музика] 689 00:39:20,654 --> 00:39:52,260 690 00:39:52,260 --> 00:39:56,980 >> Така че, разбира се, това е всичко, малко не толкова забавно 691 00:39:56,980 --> 00:40:01,100 ако не можем да го конвертирате на полувремето така че може би това 692 00:40:01,100 --> 00:40:04,650 може да се тълкува от човек изпълнител. 693 00:40:04,650 --> 00:40:06,535 Така че аз няма да го стартирате тук. 694 00:40:06,535 --> 00:40:07,910 Аз вече генерирани файловете. 695 00:40:07,910 --> 00:40:10,280 Можете да видите, че има дот LilyPond file-- и това 696 00:40:10,280 --> 00:40:14,500 Ще ми бъде Segue към Connor-- и файл дот MIDI, 697 00:40:14,500 --> 00:40:18,610 и точка, PDF файл, което е това, LilyPond в крайна сметка ще генерира. 698 00:40:18,610 --> 00:40:23,770 >> Но това са тези скриптове, и аз ще просто да ги стартирате с тяхна помощ опции. 699 00:40:23,770 --> 00:40:28,090 Ако получите тези и се изпълняват с Euterpea, можете да генерирате файл MIDI. 700 00:40:28,090 --> 00:40:31,160 И тогава от MIDI файл с тази програма MIDI 2LY, 701 00:40:31,160 --> 00:40:34,930 можете да генерирате Lily Файл Pond, а след това ви 702 00:40:34,930 --> 00:40:37,974 може да генерира PDF от резултата. 703 00:40:37,974 --> 00:40:39,390 И ние трябва да погледнем на това. 704 00:40:39,390 --> 00:40:52,599 705 00:40:52,599 --> 00:40:55,140 Така че Конър вероятно ще покаже как да поясняват това по-добре, 706 00:40:55,140 --> 00:41:02,570 но това е Frere Jacques като генерирани от мен в Euterpea. 707 00:41:02,570 --> 00:41:07,300 Това е просто в C. Трябваше да измисли какво рана това е всъщност инча 708 00:41:07,300 --> 00:41:11,090 Но това е процес на подготовка за как се прави това с това. 709 00:41:11,090 --> 00:41:12,950 Нека поговорим повече за LilyPond. 710 00:41:12,950 --> 00:41:15,780 >> Конър HARRIS: OK Нека да видим. 711 00:41:15,780 --> 00:41:19,480 712 00:41:19,480 --> 00:41:21,419 Споменахте ли Научете Вие Haskell? 713 00:41:21,419 --> 00:41:22,460 СТИВЪН KREWSON: О, да. 714 00:41:22,460 --> 00:41:23,480 Вижте Научете Вие Haskell. 715 00:41:23,480 --> 00:41:24,410 Това е в ресурсите. 716 00:41:24,410 --> 00:41:26,830 Ето как аз започнах учене, и това е страхотно. 717 00:41:26,830 --> 00:41:27,580 Не е тъпо учене. 718 00:41:27,580 --> 00:41:28,829 >> Конър HARRIS: Така че е онлайн. 719 00:41:28,829 --> 00:41:34,760 Така че един човек на име [недоловим] learnyouahaskell.com, без интервали. 720 00:41:34,760 --> 00:41:37,065 Граматика е болен. 721 00:41:37,065 --> 00:41:38,690 СТИВЪН KREWSON: Това е илюстрирана, също. 722 00:41:38,690 --> 00:41:39,440 Конър HARRIS: И така, какво е LilyPond? 723 00:41:39,440 --> 00:41:42,480 Това е декларативен програмиране език за музика наборен. 724 00:41:42,480 --> 00:41:45,480 Така че можете да declarative-- мисли за неща като HTML, 725 00:41:45,480 --> 00:41:50,900 когато не сте saying-- HTML не казва как уеб браузъри трябва 726 00:41:50,900 --> 00:41:52,180 правят страници стъпка по стъпка. 727 00:41:52,180 --> 00:41:54,096 Това е просто казвам това е текстово описание 728 00:41:54,096 --> 00:41:56,100 на това, което искате на страницата, за да изглежда така. 729 00:41:56,100 --> 00:41:59,310 >> И тогава тя също е една програма че компилира този език, 730 00:41:59,310 --> 00:42:02,300 или да го прочетете му в и след това всъщност върши наборен за вас, 731 00:42:02,300 --> 00:42:05,570 и да го изплюе тях прекрасни търсят PDF резултати. 732 00:42:05,570 --> 00:42:08,250 Можете също така да получите PNG формат или нещо такова. 733 00:42:08,250 --> 00:42:10,300 Един добър начин да се мисли това е по аналогия 734 00:42:10,300 --> 00:42:16,620 е, че LaTeX е нещо като LillyPond, но само за обикновен набор. 735 00:42:16,620 --> 00:42:20,360 Така че, вместо of-- това не е WYSIWYG, това, което виждате 736 00:42:20,360 --> 00:42:22,960 , Това получавате, като, да речем Finale е, или Sibelius, 737 00:42:22,960 --> 00:42:27,430 или Microsoft Word, където можете да напишете в реално време и проекти на нещата в реално време 738 00:42:27,430 --> 00:42:31,340 и да видим промени мигновено. 739 00:42:31,340 --> 00:42:32,140 >> Тя се основава на текст. 740 00:42:32,140 --> 00:42:35,290 Вие трябва да компилирате партитури с помощта на отделна програма 741 00:42:35,290 --> 00:42:37,090 и да излезе на PDF файлове по-късно. 742 00:42:37,090 --> 00:42:43,320 Това е малко по-малко удобна за употреба, ако сте 743 00:42:43,320 --> 00:42:46,520 опитвайки се да пишете директно в резултат и сте 744 00:42:46,520 --> 00:42:48,620 опитвайки се да композира на компютъра. 745 00:42:48,620 --> 00:42:50,830 Но има много предимства за него. 746 00:42:50,830 --> 00:42:56,110 One, тя не изглежда много по-хубав, защото LillyPond може действително 747 00:42:56,110 --> 00:42:58,210 отделете време да се направи оформлението на решенията правилно, 748 00:42:58,210 --> 00:43:02,380 за разлика Sibelius или Finale, които имат да се направи така, компрометираните алгоритми 749 00:43:02,380 --> 00:43:05,020 че те могат да се покаже неща в реално време. 750 00:43:05,020 --> 00:43:07,660 >> Така че, защо е LilyPond-- компютърна графика е трудно. 751 00:43:07,660 --> 00:43:10,535 Ако правиш нещо с музика и искате да напишете резултати, 752 00:43:10,535 --> 00:43:13,900 вие не искате да напишете всичко от себе си 753 00:43:13,900 --> 00:43:19,040 като се започне с това как да се направи щабовете и как да се направи бележници. 754 00:43:19,040 --> 00:43:21,020 Много е труден. Това е било направено преди. 755 00:43:21,020 --> 00:43:22,170 Добре си. 756 00:43:22,170 --> 00:43:26,200 >> Ако искате да използвате Finale или Sibelius, файлови формати за тези неща, 757 00:43:26,200 --> 00:43:30,180 са доста сложни, и не можете да наистина ги използва програмно. 758 00:43:30,180 --> 00:43:35,020 Можете да се отворят Sibelius с Finale и отидете на Файл, Експорт като PDF себе си, 759 00:43:35,020 --> 00:43:37,600 но не можете да наистина обадя, че по сценарий. 760 00:43:37,600 --> 00:43:40,440 LillyPond, можете да се обадите от тези сценарии. 761 00:43:40,440 --> 00:43:44,397 Така лесно може да превъртите LillyPond с LaTeX. 762 00:43:44,397 --> 00:43:47,230 Аз няма да са толкова много време, за да отида в тези технологии точно сега, 763 00:43:47,230 --> 00:43:48,321 но те съществуват. 764 00:43:48,321 --> 00:43:50,070 Ако искате да изглеждате в книга LillyPond, 765 00:43:50,070 --> 00:43:53,760 това е програма, която идва с вашата дистрибуция LillyPond, 766 00:43:53,760 --> 00:43:57,030 и това е за итерации LillyPond фрагменти в LaTeX 767 00:43:57,030 --> 00:44:00,340 ако искате да направите нещо като голям музикознание документ 768 00:44:00,340 --> 00:44:02,289 с примери, например. 769 00:44:02,289 --> 00:44:04,580 И това е добра умение за живот, ако правиш нещо 770 00:44:04,580 --> 00:44:05,770 с музика, а не само CS50. 771 00:44:05,770 --> 00:44:09,320 Ползвал съм LillyPond за всички от моите състава проекти 772 00:44:09,320 --> 00:44:11,880 тъй като бях в основата на старши в гимназията. 773 00:44:11,880 --> 00:44:13,455 >> Ето някои прости примери. 774 00:44:13,455 --> 00:44:17,490 775 00:44:17,490 --> 00:44:21,060 Това е в общи линии представител на нивото на трудност 776 00:44:21,060 --> 00:44:23,481 че повечето хора биха го кажем са се опитвали 777 00:44:23,481 --> 00:44:24,980 да използват LilyPond за прости проекти. 778 00:44:24,980 --> 00:44:29,519 Това първо един е началото да хорал прелюдия от Бах. 779 00:44:29,519 --> 00:44:31,810 Това отдолу един е откъс от един от моите собствени творби, 780 00:44:31,810 --> 00:44:34,650 и това е само там, за да се покаже вие, такива неща [недоловим] 781 00:44:34,650 --> 00:44:38,550 извеждането на няколко реда в една и съща персонала, как лиричен undersetting работи. 782 00:44:38,550 --> 00:44:41,350 783 00:44:41,350 --> 00:44:46,110 Lyric настилки са нещо, което е много лесен за използване LilyPond за хорова музика. 784 00:44:46,110 --> 00:44:48,814 >> И така, след това има някои по- сложни примери тук. 785 00:44:48,814 --> 00:44:50,980 Всичко това се прави в LilyPond и те са осъществими. 786 00:44:50,980 --> 00:44:55,280 Този първи откъс е от [Недоловим] от [недоловим]. 787 00:44:55,280 --> 00:44:58,860 И това [недоловим] от парче за соло бас 788 00:44:58,860 --> 00:45:03,550 флейта от [недоловим], който е longtime-- които 789 00:45:03,550 --> 00:45:07,101 е дългогодишен член на музика отдел тук, мисля. 790 00:45:07,101 --> 00:45:08,600 Аз не съм сигурен къде е отишъл да. 791 00:45:08,600 --> 00:45:12,410 Но той беше съветник на Харвард Композитори асоциация за дълго време. 792 00:45:12,410 --> 00:45:13,530 Прекрасен човек. 793 00:45:13,530 --> 00:45:16,920 И той пише музика, която има много сложна система за означаване, че LillyPond 794 00:45:16,920 --> 00:45:20,500 все пак може да се справи много добре. 795 00:45:20,500 --> 00:45:26,030 >> Така че просто да ви даде усещане за това, което възможности това нещо е толкова are-- 796 00:45:26,030 --> 00:45:28,960 вътрешността на LillyPond са доста сложни. 797 00:45:28,960 --> 00:45:31,060 И вие можете да го използвате за дълго време, включително 798 00:45:31,060 --> 00:45:32,520 за някои доста сложно неща, без наистина да 799 00:45:32,520 --> 00:45:34,060 се налага да знаем много за тях. 800 00:45:34,060 --> 00:45:38,720 Но основната идея е, че на ниското ниво, атомите на LillyPonds 801 00:45:38,720 --> 00:45:39,970 са бележките. 802 00:45:39,970 --> 00:45:42,761 Бележките съдържат контекстни наречените гласове. 803 00:45:42,761 --> 00:45:44,510 Така контекста на глас основно съответства 804 00:45:44,510 --> 00:45:47,410 до един ред полифония. 805 00:45:47,410 --> 00:45:49,410 И тогава контекст може да бъде съдържаща се йерархично 806 00:45:49,410 --> 00:45:53,590 в по-високите нива, които означават щабовете на резултата 807 00:45:53,590 --> 00:45:56,750 или по-големи групи, като пиано щабове или хорови щабове, 808 00:45:56,750 --> 00:45:58,990 и след това евентуално цели резултатни контексти. 809 00:45:58,990 --> 00:46:02,260 И всъщност може да обхване няколко десетки в една книга. 810 00:46:02,260 --> 00:46:05,770 >> И всеки контекст има брой прикрепени гравьори. 811 00:46:05,770 --> 00:46:08,340 Ако погледнете през съдържание на контекста 812 00:46:08,340 --> 00:46:14,410 и отпечатване на определен символ или определен клас от символи като необходимо. 813 00:46:14,410 --> 00:46:17,840 Така че на всеки глас контекст Има [недоловим] бележки 814 00:46:17,840 --> 00:46:24,270 гравьор, който е в основата на функция или обект, който пише през цялото бележката 815 00:46:24,270 --> 00:46:26,290 главите на правилните части на една страница. 816 00:46:26,290 --> 00:46:29,510 Тогава там е една пукнатина гравьор, който пише на пукнатини на персонала. 817 00:46:29,510 --> 00:46:31,517 Тогава там е метроном марка гравьор, че 818 00:46:31,517 --> 00:46:33,100 пише на метроном марки в полувремето. 819 00:46:33,100 --> 00:46:36,410 И всичко това се поберат доста добре в йерархията. 820 00:46:36,410 --> 00:46:39,500 И това е много, много, много персонализация, която имате нужда 821 00:46:39,500 --> 00:46:42,880 ако искате да получите такива неща. 822 00:46:42,880 --> 00:46:45,730 >> Така че всички контексти имат всякакви други атрибути 823 00:46:45,730 --> 00:46:52,410 които можете да модифицирате за всичко от разстоянието на различни шрифта 824 00:46:52,410 --> 00:46:54,942 избор на размери на нещата. 825 00:46:54,942 --> 00:46:56,900 Ако искате да направите още по-сложни неща, 826 00:46:56,900 --> 00:46:59,210 има вграден скриптов език. 827 00:46:59,210 --> 00:47:01,820 Те използват схема, която е диалект на LISP. 828 00:47:01,820 --> 00:47:04,960 Това вероятно не правим означава нищо за вас. 829 00:47:04,960 --> 00:47:06,900 Но общо взето, схема друга функционална 830 00:47:06,900 --> 00:47:09,500 език за програмиране, повече или по-малко. 831 00:47:09,500 --> 00:47:10,800 >> СТИВЪН KREWSON: The вратовръзки в. 832 00:47:10,800 --> 00:47:12,690 >> Конър HARRIS: Да. 833 00:47:12,690 --> 00:47:15,390 Това е добра вратовръзки в, предполагам. 834 00:47:15,390 --> 00:47:20,150 И той се използва като език на преподаване, всъщност, надолу Mass Ave. В MIT. 835 00:47:20,150 --> 00:47:26,590 И това е много удобен за LillyPond за различни технически причини. 836 00:47:26,590 --> 00:47:30,317 >> И така, ако искате да направите проста ощипвам зависими от условностите, 837 00:47:30,317 --> 00:47:32,900 за example-- има определена състояние на полувремето, че е изпълнено, 838 00:47:32,900 --> 00:47:36,495 правят промени в оформление или whatnot-- тогава 839 00:47:36,495 --> 00:47:37,620 тези съоръжения са там. 840 00:47:37,620 --> 00:47:38,667 Те са сложни. 841 00:47:38,667 --> 00:47:40,250 Така че тук е доста проста примерен код. 842 00:47:40,250 --> 00:47:43,810 Това е пет линии. 843 00:47:43,810 --> 00:47:46,120 По принцип, аз съм определяне две тояги. 844 00:47:46,120 --> 00:47:46,904 Това е в 3/4. 845 00:47:46,904 --> 00:47:48,695 Първият състав има приложен темпо марки, 846 00:47:48,695 --> 00:47:51,110 но това е всъщност ще да преминете към цялата оценка, 847 00:47:51,110 --> 00:47:54,960 защото темпото марки са на нивото на полувремето. 848 00:47:54,960 --> 00:47:59,044 Гравьора The метроном марки е приложен за гол контекст. 849 00:47:59,044 --> 00:48:01,460 Има различни ключове, защото [недоловим] гравьора 850 00:48:01,460 --> 00:48:02,710 е прикрепена на щабовете. 851 00:48:02,710 --> 00:48:04,441 Всъщност можете да направите, е да. 852 00:48:04,441 --> 00:48:06,190 Пробата съм написал е всъщност в до мажор, 853 00:48:06,190 --> 00:48:07,990 но това е само за да докаже, че може да има 854 00:48:07,990 --> 00:48:09,570 различни ключове в различни екипи. 855 00:48:09,570 --> 00:48:15,710 И основния синтаксис е пишеш имайте предвид, имена с E, F, G, независимо. 856 00:48:15,710 --> 00:48:18,910 Ако искате да направите знаците, можете наставка Е или ES. 857 00:48:18,910 --> 00:48:22,640 Това е от холандски музиковедски конвенции. 858 00:48:22,640 --> 00:48:28,290 >> И да направя октава скокове, вие трябва да използвате тези кърлежи марки, запетая или апостроф. 859 00:48:28,290 --> 00:48:30,580 Роднината просто означава, каквото и да имаш бележка, 860 00:48:30,580 --> 00:48:34,080 той автоматично ще бъде plaec в октава най-близо до предишната. 861 00:48:34,080 --> 00:48:37,624 А ако искате да скочи повече от а fifth-- кажа една пета или MORE- 862 00:48:37,624 --> 00:48:39,165 тогава ще трябва да използвате [недоловим]. 863 00:48:39,165 --> 00:48:42,580 А иначе, не е нужно да зададени октава на всяка отделна нота. 864 00:48:42,580 --> 00:48:46,130 >> И относителна C, председател и C, можете само да уточним средната C 865 00:48:46,130 --> 00:48:48,630 и база C, особено първите ноти. 866 00:48:48,630 --> 00:48:55,020 След това имате тези щабове, които организират тези два гласа или образци от музика, 867 00:48:55,020 --> 00:48:56,730 и имате полувремето. 868 00:48:56,730 --> 00:48:58,440 И това изглежда така. 869 00:48:58,440 --> 00:49:01,780 870 00:49:01,780 --> 00:49:05,380 >> Ако искате да отделите време да копирате, че извадка от LillyPond 871 00:49:05,380 --> 00:49:07,530 Код на предишния спускате тук, а ти 872 00:49:07,530 --> 00:49:09,030 може да го напиша за LillyPond себе си. 873 00:49:09,030 --> 00:49:11,280 Знам, че имаме нещо че много прилича на това. 874 00:49:11,280 --> 00:49:17,236 875 00:49:17,236 --> 00:49:19,610 Така че има друга технология наречено Music XML поддържа 876 00:49:19,610 --> 00:49:22,030 от съвсем различни хора. 877 00:49:22,030 --> 00:49:28,150 XML е на текстови данни structure-- I не трябва да се каже данни structure-- казват 878 00:49:28,150 --> 00:49:29,580 метафора картата нещо. 879 00:49:29,580 --> 00:49:33,800 И тя е проектирана да държи йерархични данни много добре. 880 00:49:33,800 --> 00:49:37,050 HTML, например, е вид на XML. 881 00:49:37,050 --> 00:49:41,090 И вие можете да кажете на XML, защото те имаха всички скоби на ъгъла и ъгълът 882 00:49:41,090 --> 00:49:44,700 скоба наклонена черта марки че полета показват данни. 883 00:49:44,700 --> 00:49:47,390 >> Аз не разполагате с код Например от Music XML. 884 00:49:47,390 --> 00:49:50,450 Можете да го намерите себе си. 885 00:49:50,450 --> 00:49:53,735 По принцип, причината може да искате за използване като XML в междинния етап 886 00:49:53,735 --> 00:49:55,980 е, на първо място, това е формат за обмен на данни 887 00:49:55,980 --> 00:50:02,301 за основно every-- аз не трябва да се каже, всеки, но много различни полувремето 888 00:50:02,301 --> 00:50:02,800 писатели. 889 00:50:02,800 --> 00:50:04,966 Така че, ако напишете в Music XML, не само може да LillyPond 890 00:50:04,966 --> 00:50:08,080 го прочете с помощта на този Спомагателни програма, наречена Music XML да LY, 891 00:50:08,080 --> 00:50:11,360 но също така може да чете Finale тя, Sibelius може да го прочете. 892 00:50:11,360 --> 00:50:14,770 В зависимост от това как си вътрешен обект йерархия работи за представяне на музика, 893 00:50:14,770 --> 00:50:18,820 тя може да бъде по-лесно да се напише да Music XML, отколкото да LillyPond 894 00:50:18,820 --> 00:50:22,410 и просто да разчитат на Music XML да LY да направи превръщане. 895 00:50:22,410 --> 00:50:24,282 >> Не мисля, че [недоловим] има Music XML. 896 00:50:24,282 --> 00:50:25,490 СТИВЪН KREWSON: Това не го прави. 897 00:50:25,490 --> 00:50:26,340 Някой се работи по него, все пак. 898 00:50:26,340 --> 00:50:27,090 >> Конър HARRIS: OK. 899 00:50:27,090 --> 00:50:31,040 Euterpea не разполага с Функция Music XML изход все още. 900 00:50:31,040 --> 00:50:35,340 Ако искате окончателно идея за проект, може би се свържете с момчета 901 00:50:35,340 --> 00:50:38,620 че Стивън знае, и те биха могли да използват вашата помощ. 902 00:50:38,620 --> 00:50:40,992 >> СТИВЪН KREWSON: Много бих се радвал, че. 903 00:50:40,992 --> 00:50:43,450 Конър HARRIS: Също така, в общи линии, всеки езици за програмиране 904 00:50:43,450 --> 00:50:46,610 това е си заслужава вече има XML библиотека, 905 00:50:46,610 --> 00:50:51,030 така че можете да конвертирате всички вътрешно на музиката си в някакъв предмет 906 00:50:51,030 --> 00:50:54,120 че XML библиотеката може да напише , че ще изисква по-малко 907 00:50:54,120 --> 00:50:57,470 промени на вашата вътрешна структура за каквато и музиката, която възразява 908 00:50:57,470 --> 00:51:00,310 искам да пиша, отколкото да я пиша пряко във LillyPond би. 909 00:51:00,310 --> 00:51:04,380 След това просто да го отпечатате с XML с на XML библиотеки в своя език, 910 00:51:04,380 --> 00:51:07,260 което ще гарантира, че това е синтактично правилни и всичко, 911 00:51:07,260 --> 00:51:08,720 и след това да го конвертирате в LillyPond. 912 00:51:08,720 --> 00:51:11,060 Така че технологията може да искате да разгледа, ако правиш нещо 913 00:51:11,060 --> 00:51:11,650 Ето така. 914 00:51:11,650 --> 00:51:14,490 915 00:51:14,490 --> 00:51:16,370 >> [Недоловим], друг auxilarry технология. 916 00:51:16,370 --> 00:51:21,700 Това е в общи линии Tech Works или Tech Студио за LillyPond. 917 00:51:21,700 --> 00:51:25,380 Така той предлага помощ с синтаксис, с шаблони 918 00:51:25,380 --> 00:51:28,770 за различни чести комбинации от инструменти. 919 00:51:28,770 --> 00:51:32,780 Тя позволява на разделен екран гледане, така можете да имате своя код в един прозорец 920 00:51:32,780 --> 00:51:37,350 и PDF в друг прозорец и кликнете върху места в PDF 921 00:51:37,350 --> 00:51:40,650 за да отидете в съответната петна в изходния си код. 922 00:51:40,650 --> 00:51:45,330 Това е по-полезно, ако сте в действителност писането LillyPond себе файлове 923 00:51:45,330 --> 00:51:47,400 отколкото ако се генерира ги програмно. 924 00:51:47,400 --> 00:51:51,230 Но отново, това е нещо полезно да има. 925 00:51:51,230 --> 00:51:51,970 >> Страхотен. 926 00:51:51,970 --> 00:51:55,860 Друг resources-- аз просто ще проверете това много бързо. 927 00:51:55,860 --> 00:52:01,270 LillyPond manuals-- LillyPond има отлична документация на своята интернет страница. 928 00:52:01,270 --> 00:52:02,270 Те имат един урок. 929 00:52:02,270 --> 00:52:03,478 Те имат референтен синтаксис. 930 00:52:03,478 --> 00:52:07,010 Те имат стотици откъси за различни малки неща 931 00:52:07,010 --> 00:52:09,930 йо може да се наложи да демонстрира направя различни възможности. 932 00:52:09,930 --> 00:52:12,250 Ако искате да използвате скриптов език 933 00:52:12,250 --> 00:52:14,740 или да направите по-обширни персонализации, тогава там е 934 00:52:14,740 --> 00:52:16,730 Вътрешни референтни по това URL. 935 00:52:16,730 --> 00:52:21,950 Ако искате да използвате Music XML, има че URL, musicxml.com/tutorial. 936 00:52:21,950 --> 00:52:27,960 >> И тогава, ако трябва да се научат схема защото вие действително искате да използвате 937 00:52:27,960 --> 00:52:30,960 съоръженията скриптови в LillyPond, тогава има [недоловим] нарича 938 00:52:30,960 --> 00:52:32,918 Структурирана Тълкуване на компютърни програми, 939 00:52:32,918 --> 00:52:35,820 която не само Второто голямото CS учебник някога written-- 940 00:52:35,820 --> 00:52:39,770 ме намери след това, ако искате да знаете това, което мисля, че най-голямото един is-- 941 00:52:39,770 --> 00:52:43,580 но тя също е много добър въведение към езика правилно. 942 00:52:43,580 --> 00:52:46,630 Не е нужно повече от първите няколко секции. 943 00:52:46,630 --> 00:52:47,827 >> И това е всичко. 944 00:52:47,827 --> 00:52:48,410 Някакви въпроси? 945 00:52:48,410 --> 00:52:54,068 946 00:52:54,068 --> 00:52:57,972 >> STUDENT: Къде мога да изтеглите Вашата генериран Frere Jacques 947 00:52:57,972 --> 00:53:01,050 за да мога да го сложи на моя Ipod? 948 00:53:01,050 --> 00:53:07,574 >> СТИВЪН KREWSON: Е, можете да напишете до някои WAV файл в Euterpea. 949 00:53:07,574 --> 00:53:08,490 И вие имате кода. 950 00:53:08,490 --> 00:53:10,000 Това е на GitHub. 951 00:53:10,000 --> 00:53:15,590 Направете си собствени варианти на Frere Jacques от CS50 кошер ум. 952 00:53:15,590 --> 00:53:17,095 Би било чудесно. 953 00:53:17,095 --> 00:53:18,220 Конър HARRIS: Някой друг? 954 00:53:18,220 --> 00:53:20,261 СТИВЪН KREWSON: Нуждаем по-добър бас барабан, също. 955 00:53:20,261 --> 00:53:21,935 Това наистина е много зле. 956 00:53:21,935 --> 00:53:26,565 >> STUDENT: Euterpea има не само страна на състав, но signal-- 957 00:53:26,565 --> 00:53:27,440 СТИВЪН KREWSON: Да. 958 00:53:27,440 --> 00:53:30,100 Всъщност, до които аз направих в Euterpea когато 959 00:53:30,100 --> 00:53:33,450 взе this-- има завършат курс в Йейл, че 960 00:53:33,450 --> 00:53:35,900 използва it-- беше на синтез на звук. 961 00:53:35,900 --> 00:53:39,810 Така че има много приятен начин с помощта на стрелките 962 00:53:39,810 --> 00:53:46,150 и някои от нотацията видяхме на композиране заедно сигнални функции. 963 00:53:46,150 --> 00:53:50,610 По-специално, на бас за най- от тях е само един прост синусоида. 964 00:53:50,610 --> 00:53:54,240 Но ако започнете да композирате тези, в странни програмни начини, 965 00:53:54,240 --> 00:54:00,010 можете да получите луд звук ефекти, като странни каскади. 966 00:54:00,010 --> 00:54:04,640 Можете да създадете много трудна звучи с много модулация. 967 00:54:04,640 --> 00:54:07,730 >> Направих един проект за гранулиран синтез, което е 968 00:54:07,730 --> 00:54:12,290 някъде между FM и вземане на проби. 969 00:54:12,290 --> 00:54:15,230 Взимаш много малък, малки проби и след това 970 00:54:15,230 --> 00:54:20,440 да ги комбинира с някакъв вид модулатор и да изградят по-богат звук. 971 00:54:20,440 --> 00:54:24,900 Ние също направихме физическо моделиране, така опитвайки се да мисля за физика 972 00:54:24,900 --> 00:54:29,410 и психоакустика на нещо подобно тръба и да мисля за начина, по който 973 00:54:29,410 --> 00:54:32,320 звукът е подскачащи камбаната на тръбата 974 00:54:32,320 --> 00:54:35,200 и акустиката на стаята и моделиране 975 00:54:35,200 --> 00:54:40,195 че с основните осцилатори. 976 00:54:40,195 --> 00:54:47,690 977 00:54:47,690 --> 00:54:48,940 Конър HARRIS: Благодаря много. 978 00:54:48,940 --> 00:54:50,140 Благодаря, че дойдохте. 979 00:54:50,140 --> 00:54:52,400 И аз съм винаги готов да предприеме въпроси от email-- 980 00:54:52,400 --> 00:54:55,020 connorharris@college.harvard.edu. 981 00:54:55,020 --> 00:54:57,020 >> СТИВЪН KREWSON: Да. stephen.krewson@yale.edu. 982 00:54:57,020 --> 00:54:58,810 983 00:54:58,810 --> 00:55:00,360 Готино. 984 00:55:00,360 --> 00:55:01,667