1 00:00:00,000 --> 00:00:05,180 2 00:00:05,180 --> 00:00:05,930 CONNOR HARRIS: Hi. 3 00:00:05,930 --> 00:00:06,820 Unë jam Connor Harris. 4 00:00:06,820 --> 00:00:09,729 Unë jam një AK CS50 në Harvard. 5 00:00:09,729 --> 00:00:11,270 STEPHEN KREWSON: Jam Stephen Krewson. 6 00:00:11,270 --> 00:00:12,582 Unë jam një TF për CS50 në Yale. 7 00:00:12,582 --> 00:00:15,790 CONNOR HARRIS: Dhe ne jemi duke shkuar për të folur për disa teknologjive që ju mund të 8 00:00:15,790 --> 00:00:18,880 dëshironi të përdorni në qoftë se ju jeni të interesuar duke bërë një projekt përfundimtar ose të vërtetë 9 00:00:18,880 --> 00:00:20,920 asgjë me muzikë. 10 00:00:20,920 --> 00:00:24,400 Ne jemi duke shkuar për të fokusuar në një të parë gjuhë programimi i quajtur Haskell. 11 00:00:24,400 --> 00:00:26,280 Kjo është një funksional gjuhë, kështu paradigmë 12 00:00:26,280 --> 00:00:29,620 është shumë e ndryshme nga C ose PHP ose gjuhë të tjera imperativë 13 00:00:29,620 --> 00:00:33,450 që ju keni përdorur tashmë, dhe veçanërisht në një bibliotekë të shkruar në Haskell 14 00:00:33,450 --> 00:00:40,240 quajtur Euterpea, e cila mund të ndihmojë njerëzit me shkrim muzikë funksionalisht, 15 00:00:40,240 --> 00:00:40,780 në thelb. 16 00:00:40,780 --> 00:00:43,400 Dhe Stephen do të ecin përmes një shembull i madh i kësaj. 17 00:00:43,400 --> 00:00:46,423 >> Pas kësaj, unë do të prezantoj me diçka që quhet LillyPond, e cila 18 00:00:46,423 --> 00:00:48,370 është një teknologji për muzikë radhim. 19 00:00:48,370 --> 00:00:50,830 Kjo është lloj i si LaTeX për muzikë në qoftë se ndonjë nga ju 20 00:00:50,830 --> 00:00:57,530 kanë përdorur LaTeX për klasat e matematikës ose klasat e tjera P Set apo çfarë keni. 21 00:00:57,530 --> 00:01:00,440 Dhe kështu që unë do të ju jap, përsëri, disa shembuj të thjeshtë të cilat 22 00:01:00,440 --> 00:01:03,640 dhe të ju pikë në përgjithësi drejtimi i disa resurseve më të mira. 23 00:01:03,640 --> 00:01:04,319 >> STEPHEN KREWSON: Në Përveç kësaj, ne kemi menduar se 24 00:01:04,319 --> 00:01:06,720 do të ishte e ftohtë për të ngritur pak e lë të kuptohet 25 00:01:06,720 --> 00:01:10,780 drejt një tubacion midis Euterpea-generated MIDI fotografi 26 00:01:10,780 --> 00:01:13,910 në LillyPond, kështu që ne ofrojme disa udhëzim mbi Scripts 27 00:01:13,910 --> 00:01:16,310 për të bërë këtë se janë pajisur me LillyPond 28 00:01:16,310 --> 00:01:19,160 vetëm për të mbajtur atë burim të hapur dhe për të marrë një tubacion do. 29 00:01:19,160 --> 00:01:20,910 CONNOR HARRIS: Përsëri, ne duhet të theksojmë, 30 00:01:20,910 --> 00:01:23,100 këto dy teknologjive, ju nuk duhet të përdorin ato së bashku. 31 00:01:23,100 --> 00:01:25,370 Ata nuk janë projektuar për të punuar së bashku, edhe pse ata e bëjnë shumë të bukur. 32 00:01:25,370 --> 00:01:26,362 >> STEPHEN KREWSON: E drejta. 33 00:01:26,362 --> 00:01:30,116 Dhe krejtësisht falas. 34 00:01:30,116 --> 00:01:32,240 CONNOR HARRIS: Pra, mirënjohje, vetëm lexuar atë. 35 00:01:32,240 --> 00:01:33,406 STEPHEN KREWSON: rregullt në procesverbal. 36 00:01:33,406 --> 00:01:36,360 Në sajë të këtyre folks. 37 00:01:36,360 --> 00:01:39,180 Këtë unë do të zgjatem në vetëm për një moment. 38 00:01:39,180 --> 00:01:41,560 Procesi i instalimit është pak i ndërlikuar. 39 00:01:41,560 --> 00:01:45,420 Ne kemi një lexuar mua në Github që ju mund të merrni një vështrim në. 40 00:01:45,420 --> 00:01:47,840 Vetëm email mua nëse keni ndonjë pyetje. 41 00:01:47,840 --> 00:01:52,829 Por ne do të drejtuar këtë nën supozimin se kjo është duke punuar për të gjithë. 42 00:01:52,829 --> 00:01:55,620 CONNOR HARRIS: Dhe në qoftë se ju nuk mund të merrni LillyPond në punë, ndonjë gjë e madhe. 43 00:01:55,620 --> 00:02:00,139 Nuk ka përpilim gjallë që do të përfshirë, të paktën në fund tim. 44 00:02:00,139 --> 00:02:02,930 STEPHEN KREWSON: Haskell dhe LillyPond duhet të dy kanë instaluesit. 45 00:02:02,930 --> 00:02:08,497 Euterpea është shkarkuar si një paketë, kështu me radhë e kështu me radhë. 46 00:02:08,497 --> 00:02:10,080 Pra, ne jemi duke folur për muzikën e kompjuterit. 47 00:02:10,080 --> 00:02:12,990 Dhe kjo është vetëm një pamje shumë të 50.000-këmbë. 48 00:02:12,990 --> 00:02:15,700 Ka disa aspekte të ndryshme të saj. 49 00:02:15,700 --> 00:02:18,120 Dhe kjo është e përafërt dhe është do të errësojnë disa detaje. 50 00:02:18,120 --> 00:02:22,090 Por ne mund të mendojnë për diçka si përbërjen algorithmic, 51 00:02:22,090 --> 00:02:24,920 përdorur algoritme, duke përdorur kodin, për të gjeneruar 52 00:02:24,920 --> 00:02:30,280 disa lloj of-- ndoshta një vetë-ngjashëm Sekuenca e shënime, ose ndoshta shënimet 53 00:02:30,280 --> 00:02:33,330 nën një detyrim. 54 00:02:33,330 --> 00:02:35,350 Dhe pastaj ata mund të jenë kryer ose interpretuar 55 00:02:35,350 --> 00:02:38,390 me instrumente analoge apo diçka të tillë. 56 00:02:38,390 --> 00:02:42,010 Por përbërja ishte bërë algoritmikisht. 57 00:02:42,010 --> 00:02:45,120 >> Por sigurisht, ndoshta zona e muzikë kompjuter ose muzikë dixhitale 58 00:02:45,120 --> 00:02:48,870 ne jemi më të njohur me është dixhitale sintezë të shëndoshë ose marrjen e mostrave dixhital 59 00:02:48,870 --> 00:02:51,160 dhe regjistrimi dixhital. 60 00:02:51,160 --> 00:02:55,650 Një shumë e instrumentave dixhitale janë bëhet përmes marrjes së mostrave dixhital. 61 00:02:55,650 --> 00:03:00,110 Në fakt, ne do të jetë duke përdorur një nga ata që janë në formën e një biblioteke të shëndoshë font më vonë. 62 00:03:00,110 --> 00:03:02,850 >> Por ka edhe diçka që quhet sintezë dixhital që doli 63 00:03:02,850 --> 00:03:08,650 nga fund të viteve '70 dhe në '80 me Yamaha dhe John Chowning në Stanford 64 00:03:08,650 --> 00:03:11,990 duke bërë sinteza FM ose Modulimi sintezë Frekuenca, 65 00:03:11,990 --> 00:03:15,100 ku keni pasur një zgarë sinjal dhe një sinjal modulating 66 00:03:15,100 --> 00:03:18,270 si në spektrin audio. 67 00:03:18,270 --> 00:03:22,570 Por ajo që ne jemi fokusuar në sot është diçka që quhet MIDI, 68 00:03:22,570 --> 00:03:25,040 dhe natyrisht, përbërja algorithmic. 69 00:03:25,040 --> 00:03:30,940 >> Ne nuk jemi duke shkuar për të bërë instrumente, por ne jemi në vend të kësaj do të bëjë disa muzikë, 70 00:03:30,940 --> 00:03:33,940 dhe pastaj që do të interpretohet nga disa instrumente që 71 00:03:33,940 --> 00:03:38,300 janë conformant me standardi i përgjithshëm MIDI. 72 00:03:38,300 --> 00:03:40,830 Pra, çfarë është MIDI? 73 00:03:40,830 --> 00:03:45,550 Unë nuk jam duke shkuar për të marrë shumë thellë në të, por MIDI është protokoll transferimit të të dhënave. 74 00:03:45,550 --> 00:03:49,250 Kjo është një lloj i një udhëzues të gjithë kompani të ndryshme dhe industri 75 00:03:49,250 --> 00:03:52,250 për organizimin e tingujve ose patches. 76 00:03:52,250 --> 00:03:54,170 Pra, ne do të shohim se ka një standard MIDI 77 00:03:54,170 --> 00:03:57,500 për të gjithë goditje të ndryshme tinguj dhe rekomandimet MIDI 78 00:03:57,500 --> 00:04:01,360 për të gjitha llojet e ndryshme të Synth ose lloje të ndryshme të të gjitha instrumenteve të 79 00:04:01,360 --> 00:04:03,650 grupe në një orkestër, thonë. 80 00:04:03,650 --> 00:04:08,916 >> Ju ndoshta jeni njohur me 0 deri 127 mesazhet MIDI. 81 00:04:08,916 --> 00:04:12,920 Një sinjal MIDI është zakonisht një grimë treguar 82 00:04:12,920 --> 00:04:16,130 nëse kjo është një e të dhënave ose një pako statusin, dhe pastaj nuk ka 83 00:04:16,130 --> 00:04:18,589 shtatë pjesë të një sinjal. 84 00:04:18,589 --> 00:04:21,430 Dhe këto mund të kontrollojë çdo gjë nga vëllimi 85 00:04:21,430 --> 00:04:25,330 te veprimit ose presionin në një çelës të veçantë 86 00:04:25,330 --> 00:04:29,400 në qoftë se ju jeni duke kryer me një MIDI kontrollues si dhe, sigurisht, 87 00:04:29,400 --> 00:04:31,250 shënime. 88 00:04:31,250 --> 00:04:33,450 Dhe sigurisht, MIDI ka qenë jashtëzakonisht e dobishme, 89 00:04:33,450 --> 00:04:37,550 sepse kjo është një mënyrë për të tel së bashku ose zinxhir daisy 90 00:04:37,550 --> 00:04:41,570 një bandë e pajisjeve hardware MIDI. 91 00:04:41,570 --> 00:04:44,050 Unë kam shtatë ose tetë kthyer në shtëpinë time. 92 00:04:44,050 --> 00:04:46,610 Ajo merr komplikuar me të vërtetë, por kjo është me të vërtetë i fuqishëm. 93 00:04:46,610 --> 00:04:47,460 Dhe kjo është me të vërtetë e vjetër. 94 00:04:47,460 --> 00:04:51,117 Kjo është nga fillim '80s, dhe kjo është me të vërtetë e bukur dhe të vogla. 95 00:04:51,117 --> 00:04:51,950 CONNOR HARRIS: Po. 96 00:04:51,950 --> 00:04:54,230 Të gjitha Nintendo klasik video lojërat ndoshta do të 97 00:04:54,230 --> 00:04:56,088 kanë fotografi MIDI për muzikë, për shembull. 98 00:04:56,088 --> 00:04:59,550 99 00:04:59,550 --> 00:05:01,740 >> STEPHEN KREWSON: Këtu është një Shembulli i MIDI përgjithshme, 100 00:05:01,740 --> 00:05:06,520 duke treguar MIDI si një lloj i protokollit të përgjithshëm. 101 00:05:06,520 --> 00:05:13,280 Dhe unë mendoj se ne mund të mendoj e Dallimi në mes specifikimit 102 00:05:13,280 --> 00:05:17,830 se nuk duhet të jetë diçka si këto instrument tingëllon dhe aktuale 103 00:05:17,830 --> 00:05:21,740 Realizimi i këtyre instrumenteve tingëllon në një font të shëndoshë apo një MIDI veçantë 104 00:05:21,740 --> 00:05:25,740 Synthesizer si ndryshimi ndërmjet ndoshta një typeface-- i cili thotë, 105 00:05:25,740 --> 00:05:30,350 në përgjithësi, kjo është projektimi i kjo mënyrë të veçantë për të përfaqësuar 106 00:05:30,350 --> 00:05:35,907 characters-- dhe një font të veçantë që ka një madhësi të veçantë dhe timbër, 107 00:05:35,907 --> 00:05:37,240 dhe nuk ka realizimi i the-- 108 00:05:37,240 --> 00:05:39,156 >> CONNOR HARRIS: Ndoshta një krahasim më të mirë do të 109 00:05:39,156 --> 00:05:43,430 të jetë standardi Unicode says-- ajo i jep një numër për çdo karakter, dhe me të vërtetë 110 00:05:43,430 --> 00:05:46,830 çdo gjuhë në botë, ose një grup i madh i Scripts të gjuhës 111 00:05:46,830 --> 00:05:51,310 në botë, dhe pastaj ato janë dhënë në diçka grafike 112 00:05:51,310 --> 00:05:53,710 nga paketa të ndryshme font. 113 00:05:53,710 --> 00:05:56,630 Dhe natyrisht, ju mund të mendoni MIDI si Unicode e shëndoshë. 114 00:05:56,630 --> 00:06:03,250 Dhe kjo është vetëm një listë of-- një lumë i madh e ngjarjeve dhe instrumenteve dhe gjësend, 115 00:06:03,250 --> 00:06:06,090 dhe ju duhet të keni një të veçantë program, si një typeface, 116 00:06:06,090 --> 00:06:08,537 që të merr atë në diçka që është audible. 117 00:06:08,537 --> 00:06:12,360 118 00:06:12,360 --> 00:06:13,780 >> STEPHEN KREWSON: Pra, pse Haskell? 119 00:06:13,780 --> 00:06:19,110 Haskell është një programimit funksional gjuha, shumë të avancuara, 120 00:06:19,110 --> 00:06:22,770 shumë e ndryshme nga C, shumë e ndryshme nga PHP. 121 00:06:22,770 --> 00:06:28,120 Dhe ne jemi duke shkuar për të parë se ka një lehtësinë e përbërjes funksionit në Haskell 122 00:06:28,120 --> 00:06:37,640 që do të na lejojë të fllad përmes kompozimin ose shtypni lart, transkriptuar, 123 00:06:37,640 --> 00:06:42,160 diçka si Frere Jacques, kjo këngë e thjeshtë që 124 00:06:42,160 --> 00:06:46,815 ka një shumë të pjesëve në të cilat janë të vetë-ngjashme ose përsëritur. 125 00:06:46,815 --> 00:06:49,740 126 00:06:49,740 --> 00:06:53,250 Pra, kjo do të jetë një prej motivimi pse 127 00:06:53,250 --> 00:06:59,400 ne jemi duke përdorur Haskell, në të cilën Funksionet janë qytetarë të klasit të parë. 128 00:06:59,400 --> 00:07:01,120 >> Dhe kam kërkuar për të zgjeruar kjo pak. 129 00:07:01,120 --> 00:07:08,800 Kjo është pak e lehtë për të notate Frere Jacques në Haskell. 130 00:07:08,800 --> 00:07:12,100 Por, çfarë nëse ne të kërkuar për shtoni një pjesë daulle për të? 131 00:07:12,100 --> 00:07:17,320 Çfarë ndodh nëse ne të kërkuar për të përpiqet të bëjë diçka si një Roland 808 apo 909 daulle 132 00:07:17,320 --> 00:07:20,970 makinë ku keni rreth 16 hapat e ndryshëm? 133 00:07:20,970 --> 00:07:24,590 Zakonisht këto janë mendohet e shënimeve si 16. 134 00:07:24,590 --> 00:07:28,640 Dhe ju mund të kontrollojë globale tempo, dhe ju mund të vini nga 135 00:07:28,640 --> 00:07:34,620 një bandë e pjesëve të ndryshme perkusion e daulle bas, një duartrokas, leqe ndryshme, 136 00:07:34,620 --> 00:07:37,540 kapele hapura dhe të mbyllura të lartë në këto lloj të kanaleve, 137 00:07:37,540 --> 00:07:41,600 dhe pastaj ju mund të eq apo rregulluar volumin e tyre. 138 00:07:41,600 --> 00:07:45,290 >> Dhe ne do të shohim një mënyrë të bukur në Haskell e përfaqëson këtë hap 139 00:07:45,290 --> 00:07:48,810 sequencer me të gjitha gjëra të ndryshme ftohtë në Haskell 140 00:07:48,810 --> 00:07:53,100 ne mund të bëjmë me gjenerimin e Listat dhe filtrim mbi listat, 141 00:07:53,100 --> 00:07:56,060 hartes mbi listat, mapping Funksionet mbi listat. 142 00:07:56,060 --> 00:07:59,530 143 00:07:59,530 --> 00:08:00,760 Dhe një falje të shpejtë. 144 00:08:00,760 --> 00:08:05,300 Kjo është një shumë i përciptë dhe skicë tepër i shpejtë 145 00:08:05,300 --> 00:08:07,620 e disa prej aspekteve e Haskell dhe Euterpea, 146 00:08:07,620 --> 00:08:11,760 i cili është një domen specifik Gjuha e shkruar ngulitur 147 00:08:11,760 --> 00:08:14,970 në Haskell për lloje muzikore. 148 00:08:14,970 --> 00:08:17,350 Pra ju lutem mos shikoni kodin në internet. 149 00:08:17,350 --> 00:08:22,404 Ndez GHCI, që është Glasgow Haskell Compiler Interpreter. 150 00:08:22,404 --> 00:08:24,320 Dhe unë do të jetë duke bërë disa e kjo në pak 151 00:08:24,320 --> 00:08:25,880 kështu që ju mund të shihni se si është bërë. 152 00:08:25,880 --> 00:08:31,021 >> Dhe kjo ju lejon të ngarkesës në me the-- sintaksa është i zorrës së trashë dhe pastaj 153 00:08:31,021 --> 00:08:31,520 komanda. 154 00:08:31,520 --> 00:08:33,510 Ju mund të ngarkesës në fotografi. 155 00:08:33,510 --> 00:08:36,840 Ju mund të përdorni shfletoni në këto fotografi të parë të gjitha funksionet që 156 00:08:36,840 --> 00:08:39,169 ekzistojnë në një modul të veçantë. 157 00:08:39,169 --> 00:08:43,850 Dhe pastaj si ne do të shohim, llojet dhe llojin e Klasat janë kaq të rëndësishme në Haskell, 158 00:08:43,850 --> 00:08:48,850 kështu që ju gjithmonë mund të check-- veçanërisht në qoftë se ju jeni duke punuar në një DSCL ri 159 00:08:48,850 --> 00:08:51,600 si kjo, ajo që është një lloj muzikë? 160 00:08:51,600 --> 00:08:55,114 Unë e di në lidhje me mënyrën se numerike Llojet punojnë në Haskell, 161 00:08:55,114 --> 00:08:56,530 por unë nuk di shumë rreth muzikës. 162 00:08:56,530 --> 00:09:01,280 Por ju mund të eksplorojnë mënyra ata janë përcaktohet duke përdorur këtë lloj t apo komandën 163 00:09:01,280 --> 00:09:04,577 dhe pastaj duke e quajtur në një mënyrë të veçantë funksion ose një objekt të dhënave. 164 00:09:04,577 --> 00:09:05,410 CONNOR HARRIS: Po. 165 00:09:05,410 --> 00:09:09,820 Nëse keni menduar C dhe tingëllimë ishte hardass në lidhje me llojet, 166 00:09:09,820 --> 00:09:11,230 ju kanë asnjë ide për Haskell. 167 00:09:11,230 --> 00:09:14,230 Gjë e mirë për Haskell është se në qoftë se ju mund të merrni kodin tuaj për të hartuar 168 00:09:14,230 --> 00:09:16,790 dhe në qoftë se kontrolle të tipit Haskell, kjo është ndoshta e drejtë, 169 00:09:16,790 --> 00:09:18,675 për shkak se sistemi lloj është aq i rreptë. 170 00:09:18,675 --> 00:09:20,090 >> STEPHEN KREWSON: Po. 171 00:09:20,090 --> 00:09:21,980 Kështu që unë vetëm dua të shkoj through-- dhe përsëri, 172 00:09:21,980 --> 00:09:27,160 kjo nuk është duke bërë atë justice-- disa prej tiparet e Haskell që, të paktën 173 00:09:27,160 --> 00:09:31,780 për creators-- saj dhe ajo u krijua në fund të viteve 1980 nga një bandë e njerëzve, 174 00:09:31,780 --> 00:09:34,610 një komitet prej rreth 20 people-- mendonte se ishin të rëndësishme. 175 00:09:34,610 --> 00:09:36,850 Dhe gjëja e parë që ata të listuara në një letër që 176 00:09:36,850 --> 00:09:41,890 përshkruan zanafillën e Haskell gjatë 20 viteve të para apo më shumë 177 00:09:41,890 --> 00:09:43,390 ishte se ajo ishte dembel. 178 00:09:43,390 --> 00:09:44,990 Pra, çfarë do të thotë kjo? 179 00:09:44,990 --> 00:09:49,860 >> E pra, kjo do të thotë që kur ne kemi disa lloj e shprehjes, ne kemi nevojë për të vlerësuar atë. 180 00:09:49,860 --> 00:09:54,390 Dhe Haskell e bën këtë në një telefonatë me anë nevojë apo një mënyrë jo-të rreptë. 181 00:09:54,390 --> 00:09:57,250 Kjo është, në qoftë se ne kemi një bandë e komponentët e shprehjes sonë, 182 00:09:57,250 --> 00:10:00,660 ne përpiqemi për të vonuar vlerësimin e këtyre nënkomponentë 183 00:10:00,660 --> 00:10:05,300 deri në absolut minute-- fundit që është deri ne fakt nevojë për to. 184 00:10:05,300 --> 00:10:08,480 >> Pra, kjo means-- i cili është të vërtetë cool, sidomos 185 00:10:08,480 --> 00:10:13,200 në qoftë se ne jemi duke menduar për nxjerrjen një hap sequencer muzikore. 186 00:10:13,200 --> 00:10:16,740 Ju kthejnë atë në, dhe ju filloni drejtimin e një sequence-- hap 187 00:10:16,740 --> 00:10:20,010 në qoftë se keni punuar ndonjëherë me një daulle machine-- dhe vetëm ajo shkon përgjithmonë. 188 00:10:20,010 --> 00:10:24,650 Pra, kjo do të jetë me të vërtetë mirë në qoftë se ne mund të matem se në Haskell. 189 00:10:24,650 --> 00:10:31,040 Dhe ne mund të bëjmë atë me pafund Vlerat, në lista të veçanta pafund. 190 00:10:31,040 --> 00:10:35,860 Është shumë e lehtë për të tipit një Lista e pafund në Haskell. 191 00:10:35,860 --> 00:10:39,230 Ju mund të përdorni vetëm sintaksë poshtë këtu, ku ju shihni 1 deri 3, 192 00:10:39,230 --> 00:10:42,440 hiqni 3 1 Dot Dot, dhe kjo është një listë e pafund 193 00:10:42,440 --> 00:10:46,960 të gjithë numrave natyrore zgjeruar për aq sa ju mund të imagjinoni. 194 00:10:46,960 --> 00:10:49,925 >> Unë dua të prezantoj një Koncepti i folds menjëherë. 195 00:10:49,925 --> 00:10:51,800 Dhe përsëri, qëllimi i këtij seminari nuk është 196 00:10:51,800 --> 00:10:55,770 për të mësuar në lidhje me folds në Haskell ose funksionet më të larta rendit. 197 00:10:55,770 --> 00:10:59,640 Por unë vetëm dua të prezantoj atë në japin një kuptim të saktë të asaj se si i çuditshëm 198 00:10:59,640 --> 00:11:03,700 Haskell është dhe sa është i fuqishëm. 199 00:11:03,700 --> 00:11:08,000 Dhe në mënyrë të veçantë, ne jemi duke shkuar për be-- kur ne bëjmë të ndryshme tanë daulle pjesë, 200 00:11:08,000 --> 00:11:12,790 ne jemi duke shkuar për të manipuluar listat e numra, palosshme ato mbi njëri tjetrin. 201 00:11:12,790 --> 00:11:17,290 Dhe për ta bërë këtë, ne do të të jetë duke përdorur harta dhe folds. 202 00:11:17,290 --> 00:11:21,770 >> Ka një shoqerues e drejtë dele, e cila është kjo e drejtë një 203 00:11:21,770 --> 00:11:26,990 here-- 1 minus sasinë, 2 minus sasinë, 3 minus 0. 204 00:11:26,990 --> 00:11:29,170 Dhe sintaksa për një dele, ju jep një dele 205 00:11:29,170 --> 00:11:34,680 një vlerë bazë dhe pastaj një operation-- Në këtë rast, mbledhjen ose zbritjen. 206 00:11:34,680 --> 00:11:36,280 Unë kam treguar dy raste. 207 00:11:36,280 --> 00:11:41,760 Dhe pastaj nuk ka një akumulator që akumulon mbi të gjithë listën, 208 00:11:41,760 --> 00:11:46,330 duke aplikuar se plus ose operatorit minus, dhe pastaj të akumulojnë atë. 209 00:11:46,330 --> 00:11:52,680 Pra, kjo do të jetë the-- në qoftë se ajo u quajt me r dele plus e 0, duke filluar me 0, 210 00:11:52,680 --> 00:11:54,720 ne atëherë do të përmbledhur të gjithë numrat në atë listë. 211 00:11:54,720 --> 00:11:57,134 Dhe kjo është një listë nga 1 deri në 3. 212 00:11:57,134 --> 00:12:00,050 CONNOR HARRIS: Pra, për ta vënë atë një tjetër mënyrë, r dele merr tre argumente. 213 00:12:00,050 --> 00:12:02,540 Ka një funksion që Vetë merr dy argumente, 214 00:12:02,540 --> 00:12:05,400 atëherë ka një vlerë motorino, dhe ka një listë të vlerave. 215 00:12:05,400 --> 00:12:08,570 Dhe çfarë ju bëni është të merrni Vlera e motorino, vlera e së pari, 216 00:12:08,570 --> 00:12:09,850 vënë ato në funksion. 217 00:12:09,850 --> 00:12:11,607 Çfarë bëni ju të merrni jashtë, marrë atë, ushqyer që 218 00:12:11,607 --> 00:12:13,940 në funksion të Vlera e dytë, ajo që ju merrni jashtë, 219 00:12:13,940 --> 00:12:16,690 marrë atë, ushqyer që në të funksion të vlerës së tretë. 220 00:12:16,690 --> 00:12:18,740 Dhe pastaj në qoftë se ju shkoni poshtë kjo listë e tërë në këtë mënyrë, 221 00:12:18,740 --> 00:12:22,970 ju jeni do të merrni përfundimisht disa vlera njëjës kjo është 222 00:12:22,970 --> 00:12:25,720 i të njëjtit lloj e asaj që ju keni filluar me dhe i llojit të njëjtë 223 00:12:25,720 --> 00:12:29,147 si gjëra në listë, dhe pastaj kjo është rezultat kthimi i dele R. 224 00:12:29,147 --> 00:12:31,980 STEPHEN KREWSON: Pra, në mënyrë të veçantë, këto janë funksione të larta rendit, 225 00:12:31,980 --> 00:12:34,460 sepse ata janë duke marrë një tjetër funksion si një prej argumenteve. 226 00:12:34,460 --> 00:12:34,770 >> CONNOR HARRIS: Po. 227 00:12:34,770 --> 00:12:37,820 Nëse e keni përdorur disa të tjerë languages-- Unë e di R, [e padëgjueshme] 228 00:12:37,820 --> 00:12:41,510 gjuha e ka këtë, të quajtur Ulja. 229 00:12:41,510 --> 00:12:45,460 Ju mund të keni funksione të ngjashme në gjuhë të tjera, i quajtur vetëm 230 00:12:45,460 --> 00:12:48,160 gjëra të ndryshme. 231 00:12:48,160 --> 00:12:50,680 >> STEPHEN KREWSON: Dhe çfarë është e bukur për dele R 232 00:12:50,680 --> 00:12:53,880 në këtë rast është se fish R mund të punojnë me listat e pafundme. 233 00:12:53,880 --> 00:12:59,490 Pra, në këtë fund, këtë P5 është gjeneruar shënimet që 234 00:12:59,490 --> 00:13:03,120 janë kthyer më në hap sequencer për disa daulle pjesë, i pesti daulle pjesë, 235 00:13:03,120 --> 00:13:05,480 dhe ndoshta kjo është një Conga daulle apo diçka. 236 00:13:05,480 --> 00:13:09,719 Dhe kjo është një qëllimisht Mënyra mpirë e këtij shkrimi, 237 00:13:09,719 --> 00:13:11,510 por kjo është argëtim, sepse kjo tregon shumë 238 00:13:11,510 --> 00:13:14,460 e gjërave rreth Haskell dhe Euterpea. 239 00:13:14,460 --> 00:13:20,650 >> Pra, dele R i këtij zorrës së trashë është colon-- vetëm një operator që shtyn gjërat 240 00:13:20,650 --> 00:13:25,700 së bashku në një list-- quajtur në një bosh Lista, e cila është vetëm kllapa bosh. 241 00:13:25,700 --> 00:13:28,250 Dhe unë jam duke e quajtur atë në këtë listë të pafund. 242 00:13:28,250 --> 00:13:31,570 Kjo është në fakt dy lista shtuar së bashku këtu poshtë. 243 00:13:31,570 --> 00:13:37,150 Lista aktuale e 1 presje 6 dot pikë është 1, 6, 11, 16. 244 00:13:37,150 --> 00:13:39,750 Pra Haskell-- në vetëm disa karaktere, ju 245 00:13:39,750 --> 00:13:42,420 mund të gjenerojnë të tërë sekuencë të numrave 246 00:13:42,420 --> 00:13:46,240 që janë pesë numra përveç shtrihen në në pafundësi. 247 00:13:46,240 --> 00:13:49,860 Dhe unë prepend për atë kjo list-- shkurtër pak 248 00:13:49,860 --> 00:13:54,370 3, 8, 21-- vetëm për të treguar se si ju mund të lidh listat. 249 00:13:54,370 --> 00:13:55,790 >> Dhe pastaj unë kam palosur në vetvete. 250 00:13:55,790 --> 00:14:01,510 Dhe kjo përfundon vetëm duke qenë një lloj i operacion identitetit, por kjo është e pafund. 251 00:14:01,510 --> 00:14:06,070 Dhe dele R mund ta bëjë këtë, sepse ajo lazily vlerëson, si në sipër. 252 00:14:06,070 --> 00:14:10,582 Në qoftë se ne kemi një 1 dhe një 2 dhe 3, ne mund të vetëm kllapa jashtë të gjithë pjesën tjetër të saj. 253 00:14:10,582 --> 00:14:12,290 Kjo nuk do të punojë për minus ose plus, por ajo 254 00:14:12,290 --> 00:14:17,760 do të punojë për këtë zorrës së trashë Operacioni identiteti në listë. 255 00:14:17,760 --> 00:14:24,620 >> Deri sa nuk kemi praktikisht të përdorin atë, nëse ne kanë një listë pafundësisht të gjatë të gjërave? 256 00:14:24,620 --> 00:14:26,500 E pra, Haskell siguron një shumë e functions-- 257 00:14:26,500 --> 00:14:29,450 dhe të kërkoni më shumë në këto në time-- juaj tilla si të marrë 258 00:14:29,450 --> 00:14:32,200 i cili thotë, OK, ne jemi gjenerimin këtë listë të pafund, 259 00:14:32,200 --> 00:14:35,950 por ne jemi vetëm duke shkuar për të marrë disa Numri i saj Dhe në këtë case-- 260 00:14:35,950 --> 00:14:38,410 ne do të shohim këtë më vonë në code-- ynë daulle makine 261 00:14:38,410 --> 00:14:43,740 GM është vetëm një lloj globale variable për numrin e hapave 262 00:14:43,740 --> 00:14:44,610 në sequencer. 263 00:14:44,610 --> 00:14:47,630 Në makinat roll-në I ju tregoi, kjo është në mënyrë tipike 16, 264 00:14:47,630 --> 00:14:51,475 por unë kam zbatuar atë me 32. 265 00:14:51,475 --> 00:14:54,470 Kjo nuk ka rëndësi. 266 00:14:54,470 --> 00:15:00,230 >> Haskell është gjithashtu i pastër, kështu që ajo ka të fortë shtypja statike që Connor përmendur tërthorazi. 267 00:15:00,230 --> 00:15:03,220 Pra funksionet janë matematikore në sensin 268 00:15:03,220 --> 00:15:06,600 ata janë më matematikore se ata janë të garantuara 269 00:15:06,600 --> 00:15:11,530 për të mos hyrë ose të ndryshojë çdo lloj variabël ose të kryejë të dhëna ose output. 270 00:15:11,530 --> 00:15:14,420 Pra, nëse ju keni një funksion, është determinist. 271 00:15:14,420 --> 00:15:17,400 Ajo gjithmonë do të kthehet e njëjtë vlera në gjendjen e programit 272 00:15:17,400 --> 00:15:19,310 ose të mbetet e njëjtë. 273 00:15:19,310 --> 00:15:22,940 Ka, natyrisht, përjashtime monadic për këtë, por kjo është përtej fushëveprimit tonë. 274 00:15:22,940 --> 00:15:23,900 >> CONNOR HARRIS: Po. 275 00:15:23,900 --> 00:15:26,946 Çfarë kjo do të thotë, megjithatë, është atje janë disa të rëndësishme [e padëgjueshme] 276 00:15:26,946 --> 00:15:27,820 Pasojat e kësaj. 277 00:15:27,820 --> 00:15:30,940 Njëra është se ajo është shumë e lehtë për të parallelize programe Haskell. 278 00:15:30,940 --> 00:15:32,773 Sepse në qoftë se ju keni, thonë se, një funksion të që 279 00:15:32,773 --> 00:15:36,064 ka nevojë për të vepruar në një milion vlerat, nëse ju e dini se funksioni do të gjithmonë 280 00:15:36,064 --> 00:15:39,280 japin të njëjtën vlerë nëse ju ushqejmë në një value-- caktuar 281 00:15:39,280 --> 00:15:43,055 në qoftë se ju jeni [e padëgjueshme] f nga 1, f të 2, më pas f prej 3 ose whatnot-- f nga 1 282 00:15:43,055 --> 00:15:45,180 nuk është duke shkuar për të shkruar jashtë në një skedar apo të bëjë diçka 283 00:15:45,180 --> 00:15:46,850 që do të ndryshojnë vlerën e F2. 284 00:15:46,850 --> 00:15:50,220 Ju vetëm mund të ndahet këtë funksion në një milion makina të ndryshme ose një milion 285 00:15:50,220 --> 00:15:54,720 temat e ndryshme apo çfarëdo, marrë të gjitha përgjigjet prapa, 286 00:15:54,720 --> 00:15:56,900 të marrë të gjitha vlerat e kthimit prapa, dhe pastaj kjo është ajo. 287 00:15:56,900 --> 00:15:59,780 Aq shumë e lehtë për parallelize gjëra. 288 00:15:59,780 --> 00:16:03,140 >> The downside është se input dhe prodhimit sidomos 289 00:16:03,140 --> 00:16:05,720 përshtaten në sistemin e tipit në mënyra shumë të komplikuara. 290 00:16:05,720 --> 00:16:09,010 Ne nuk do të shkojë në atë të drejtë tani, por unë ju inkurajojmë që të shikojmë në disa burimeve 291 00:16:09,010 --> 00:16:11,175 online në qoftë se doni të mësoni në lidhje me atë. 292 00:16:11,175 --> 00:16:13,960 293 00:16:13,960 --> 00:16:16,550 >> STEPHEN KREWSON: Pra, shkruani classes-- dhe kjo 294 00:16:16,550 --> 00:16:21,610 klasa was-- e llojeve ishin shpikur për të zgjidhur 295 00:16:21,610 --> 00:16:24,160 një problem i mbingarkesat operatorit. 296 00:16:24,160 --> 00:16:27,590 Pra, kemi dashur të kemi barazi në mes të llojeve të ndryshme të gjërave. 297 00:16:27,590 --> 00:16:31,040 Sigurisht, ne mund të mendojmë of-- barazia në mes të llojeve numerike 298 00:16:31,040 --> 00:16:34,720 është shumë e lehtë për të menduar rreth, por Po në lidhje me barazinë mes listat? 299 00:16:34,720 --> 00:16:37,610 Po në lidhje me barazinë ndërmjet pemë të dhënave këmbë strukturat? 300 00:16:37,610 --> 00:16:43,130 Dhe kjo është e gjitha e mundur në Haskell shkak të klasave të tipit. 301 00:16:43,130 --> 00:16:48,000 >> Pra, nëse ju të përcaktojë një të dhënave type-- caktuar dhe këtu, këto janë pitches muzikore. 302 00:16:48,000 --> 00:16:50,960 Ne jemi në fund duke marrë disa muzikë kompjuter. 303 00:16:50,960 --> 00:16:57,420 Pra, ne kemi C, C mprehtë, dhe kështu me radhë e kështu me radhë. 304 00:16:57,420 --> 00:17:01,080 Ata i përkasin një bandë e klasa të ndryshme lloji. 305 00:17:01,080 --> 00:17:03,510 EQ-- ata i përkasin klasës tipit EQ. 306 00:17:03,510 --> 00:17:06,780 Kjo do të thotë se ata mbështesin Operacionet e barazisë. 307 00:17:06,780 --> 00:17:12,650 Kështu që ju mund të vlerësojë nëse një Sekuenca e primitives muzikore 308 00:17:12,650 --> 00:17:15,400 është e njëjtë me një tjetër. 309 00:17:15,400 --> 00:17:17,280 >> Ata i përkasin klasës rendor. 310 00:17:17,280 --> 00:17:19,479 Kjo do të thotë se ka një urdhërimin për këto. 311 00:17:19,479 --> 00:17:27,670 D vjen pas C. C mprehtë vjen pas C, si edhe. 312 00:17:27,670 --> 00:17:29,840 Ata i përkasin klasës tregojnë, që do të thotë se ata mund të 313 00:17:29,840 --> 00:17:33,000 të jenë të shtypura në një tastierë apo terminal. 314 00:17:33,000 --> 00:17:36,090 Ata i përkasin të klasë renditura, të cilat 315 00:17:36,090 --> 00:17:39,770 do të thotë se edhe pse këto janë karaktere, 316 00:17:39,770 --> 00:17:45,340 ata kanë një numerike themelor Përfaqësimi duke filluar nga ora 0 317 00:17:45,340 --> 00:17:48,960 dhe plaste nëpër megjithatë shumë gjëra këtu, 20 apo më shumë, 318 00:17:48,960 --> 00:17:51,770 ose 30 ose 40, ndoshta. 319 00:17:51,770 --> 00:17:54,259 >> CONNOR HARRIS: Kur ne kemi një lloj të dhënave 320 00:17:54,259 --> 00:17:57,050 që derives-- me atë fjalë "deriving--" një klasë të caktuar tip, 321 00:17:57,050 --> 00:18:01,160 kjo do të thotë se përpiluesit do të përpiqet për të ndërtuar diçka automatikisht. 322 00:18:01,160 --> 00:18:05,120 Pra, ndoshta ju do të dëshironi të të përcaktojë një cilësi ndryshe. 323 00:18:05,120 --> 00:18:09,450 Ju do të dëshironi të përcaktojë C mprehtë si të barabartë me D sheshtë, per shembull. 324 00:18:09,450 --> 00:18:11,560 Me këtë ndërtim këtu, unë nuk mendoj C mprehtë 325 00:18:11,560 --> 00:18:14,940 dhe D e sheshtë do të jetë e barabartë, sepse përpiluesit do të automatikisht 326 00:18:14,940 --> 00:18:19,670 thonë se çdo vlerë tjetër të mundshme është e ndryshme nga çdo tjetër. 327 00:18:19,670 --> 00:18:22,930 >> Pra, është e mundur për të shkelur Implementimi parazgjedhur 328 00:18:22,930 --> 00:18:25,730 nga këto lloje të klasave. 329 00:18:25,730 --> 00:18:28,640 Përsëri, shikoni në referencë nëse doni të mësoni në lidhje me atë. 330 00:18:28,640 --> 00:18:31,767 331 00:18:31,767 --> 00:18:33,600 STEPHEN KREWSON: Dhe këtu, në fakt, kjo do të 332 00:18:33,600 --> 00:18:36,930 të jetë e dobishme për të, kur ne kodin më vonë. 333 00:18:36,930 --> 00:18:42,150 Ne shohim disa nga operatorët Infiks për përbërjen sekuencial 334 00:18:42,150 --> 00:18:46,570 përbërja paralele, dhe kështu me radhë, këto pluses dhe shenja të barabarta 335 00:18:46,570 --> 00:18:48,620 rrethuar nga colons. 336 00:18:48,620 --> 00:18:53,330 Kjo do të thotë që ne mund të luajnë këto ndryshme primitives muzikore njëri pas tjetrit. 337 00:18:53,330 --> 00:18:54,590 Kjo është përbërja vijues. 338 00:18:54,590 --> 00:18:57,170 >> Ose ne mund të luajnë ata në paralel në të njëjtën kohë. 339 00:18:57,170 --> 00:19:05,100 Kështu që unë mund të ketë një vlerë muzikore, dhe pastaj kjo barabartë dhe colons, 340 00:19:05,100 --> 00:19:09,669 Infiks operator paralele përbërjen, dhe ata luajnë si një lloj akord. 341 00:19:09,669 --> 00:19:11,460 Dhe ne jemi duke shkuar për të përdorur kjo kur ne të kombinuar 342 00:19:11,460 --> 00:19:15,080 daulle pjesa jonë me tonë pak këngë Frere Jacques 343 00:19:15,080 --> 00:19:19,460 për të luajtur këto dy sekuenca të Vlerat muzikore në të njëjtën kohë. 344 00:19:19,460 --> 00:19:24,520 345 00:19:24,520 --> 00:19:29,250 >> Currying Curry is-- i fundit emri i Haskell Curry, i cili 346 00:19:29,250 --> 00:19:31,850 imazhi Haskell është emëruar pas. 347 00:19:31,850 --> 00:19:34,330 Dhe kjo na lejon një Hijeshi e bukur kur ne jemi 348 00:19:34,330 --> 00:19:36,880 shkruar të gjitha këto të ndryshëm funksione ose filtra që ne jemi 349 00:19:36,880 --> 00:19:39,330 do të jetë i hartës mbi listat tona. 350 00:19:39,330 --> 00:19:42,810 Një funksion i dy argumente të f i x dhe y-- 351 00:19:42,810 --> 00:19:46,630 mund të përfaqësohet si f e x aplikuar y. 352 00:19:46,630 --> 00:19:49,800 Pra, kjo është një funksion i një argument që kthehet 353 00:19:49,800 --> 00:19:51,240 Një tjetër funksion i një argument. 354 00:19:51,240 --> 00:19:56,962 Pra, kjo do të thotë që ne mund të hartë një Funksioni f e X mbi listën e y-së. 355 00:19:56,962 --> 00:19:58,920 CONNOR HARRIS: Dëshironi të jap një shembull të kësaj? 356 00:19:58,920 --> 00:19:59,836 STEPHEN KREWSON: Po. 357 00:19:59,836 --> 00:20:05,390 Unë kam një shembull të drejtë këtu nga disa nga gjërat që ne do të shkruaj. 358 00:20:05,390 --> 00:20:10,500 Pra replikuar 2-- mirë, përsëris do të marrë 359 00:20:10,500 --> 00:20:13,040 një vlerë, e cila eshte sa herë për të replikuar diçka, 360 00:20:13,040 --> 00:20:16,690 dhe pastaj ajo do të marrë një value-- zakonisht një listë apo diçka. 361 00:20:16,690 --> 00:20:23,450 Kështu që këtu, ne jemi hartës replikuar 2 mbi një tjetër listë. 362 00:20:23,450 --> 00:20:27,440 >> Pra, nëse ne hartë përsëris 2, në qoftë se ne përsëris 2 zbatohen 363 00:20:27,440 --> 00:20:31,890 të elementit të parë të kësaj list-- dhe këto janë listat e phrases-- muzikore 364 00:20:31,890 --> 00:20:37,650 do të prodhojë dy "ju sleeping--" kështu që po fle, po fle. 365 00:20:37,650 --> 00:20:40,040 Deri tani ne kemi dy. 366 00:20:40,040 --> 00:20:42,570 Por replikuar merr dy argumente, por sepse ne jemi 367 00:20:42,570 --> 00:20:47,100 currying dhe pastaj hartës, ne mund të përfaqësojë përsëris 2 368 00:20:47,100 --> 00:20:52,310 si që janë kthyer si një funksion i një argument-- vetëm përsëritur dy herë. 369 00:20:52,310 --> 00:20:57,010 Dhe pastaj ne jemi duke aplikuar atë për çdo element në këtë listë të frazat. 370 00:20:57,010 --> 00:21:01,900 >> Dhe concat është një Haskell Operacioni për rrafshim një listë. 371 00:21:01,900 --> 00:21:04,400 Sepse replikuar 2 do të prodhuar një listë të listave. 372 00:21:04,400 --> 00:21:06,660 Dhe kjo është kjo formë e ndërmjetme këtu. 373 00:21:06,660 --> 00:21:10,365 Dhe kështu që atëherë ne mund të concat ose shkatërroj se nga dy herë. 374 00:21:10,365 --> 00:21:12,240 CONNOR HARRIS: Një thjeshtë shembull i currying, 375 00:21:12,240 --> 00:21:15,323 në qoftë se ju do të like-- imagjinoni f është vetëm një Funksioni i shumëzimit që merr dy 376 00:21:15,323 --> 00:21:16,840 argumentet dhe kthehet produktin e tyre. 377 00:21:16,840 --> 00:21:19,320 Pra, nëse ju keni një F 4 5, është 20. 378 00:21:19,320 --> 00:21:22,670 Por ju mund të mendoni për këtë si also-- ju keni një funksion f 4 379 00:21:22,670 --> 00:21:25,560 që merr një argument dhe kthimit katër herë kjo argument-- vetëm 380 00:21:25,560 --> 00:21:27,870 aplikimi i pjesshëm i cili vetëm një argument 4. 381 00:21:27,870 --> 00:21:31,182 Dhe në qoftë se ju ushqejmë f nga 4 5, që do t'ju japë 20. 382 00:21:31,182 --> 00:21:32,890 Dhe kjo është një thjeshtë Shembulli i currying. 383 00:21:32,890 --> 00:21:34,473 Kjo është zakonisht një nga ato teksteve. 384 00:21:34,473 --> 00:21:38,860 385 00:21:38,860 --> 00:21:42,110 >> STEPHEN KREWSON: Lambda shprehje ose funksionet anonim 386 00:21:42,110 --> 00:21:47,330 janë një tjetër shenjë dalluese Haskell. 387 00:21:47,330 --> 00:21:51,242 Pra, nëse ne kemi nevojë për të nxitur një pak funksion jeta replikuar, 388 00:21:51,242 --> 00:21:52,950 por thonë se kjo nuk është në biblioteka standarde, 389 00:21:52,950 --> 00:21:56,150 ne mund të përdorni një sintaksë të ngjashme me këto. 390 00:21:56,150 --> 00:21:58,730 Dhe ne do të fllad mbi këtë. 391 00:21:58,730 --> 00:22:02,160 Një gjë që ju do të shihni një shumë e në daulle makinë është që ne jemi duke bërë thirrje 392 00:22:02,160 --> 00:22:05,790 për diçka të quajtur filtër, i cili si më parë, 393 00:22:05,790 --> 00:22:08,185 është një hartë e një funksioni mbi një listë, por kjo është 394 00:22:08,185 --> 00:22:10,260 një hartë e një funksion Boolean. 395 00:22:10,260 --> 00:22:13,390 >> Kështu që ne kemi këtu një shembull e një një anonime 396 00:22:13,390 --> 00:22:19,150 funksion Boolean përcaktuar se merr vetëm vlerat çift. 397 00:22:19,150 --> 00:22:22,990 Kjo nuk është të thuash të drejtën një funksion anonim. 398 00:22:22,990 --> 00:22:25,850 Por kjo është të përcaktojë me që sintaksë për shkurtësi, 399 00:22:25,850 --> 00:22:28,007 dhe kjo vetëm merr x modul n-- 400 00:22:28,007 --> 00:22:28,840 CONNOR HARRIS: Po. 401 00:22:28,840 --> 00:22:31,330 Pra, f është një funksion i dy argumente n dhe p 402 00:22:31,330 --> 00:22:35,440 që kthen një funksion që është vetë një funksion i një argument, domethënë x. 403 00:22:35,440 --> 00:22:38,815 404 00:22:38,815 --> 00:22:40,690 STEPHEN KREWSON: I Operatorët përmendura Infiks. 405 00:22:40,690 --> 00:22:42,642 Cilat janë operatorët Infiks? 406 00:22:42,642 --> 00:22:45,710 E pra, operatorët Infiks janë mënyrë normale ne përfaqësojmë operacionet, 407 00:22:45,710 --> 00:22:49,910 thonë se, në mathematics-- 2 plus 2 në vend të operatorit plus 408 00:22:49,910 --> 00:22:51,202 dhe pastaj dy argumente 2 dhe 2. 409 00:22:51,202 --> 00:22:53,701 CONNOR HARRIS: Ajo që quhet kundërt polish simbol, i cili është 410 00:22:53,701 --> 00:22:55,330 një term Dyshoj ndonjëri prej jush do të di. 411 00:22:55,330 --> 00:22:56,288 >> STEPHEN KREWSON: E drejta. 412 00:22:56,288 --> 00:22:58,290 Reverse polish ose prefiksin shënim. 413 00:22:58,290 --> 00:23:01,412 Por Haskell vendosi të përdorin operatorët Infiks. 414 00:23:01,412 --> 00:23:03,120 Pra, këto janë disa nga ato porosi që 415 00:23:03,120 --> 00:23:07,770 janë përcaktuar për Euterpea DSCL në Haskell. 416 00:23:07,770 --> 00:23:10,730 Pra, kjo ishte përbërje vijues. 417 00:23:10,730 --> 00:23:16,340 Kjo ishte përbërja paralele, dhe kjo u truncating përbërjen paralele. 418 00:23:16,340 --> 00:23:18,710 Dhe ne do të duhet që me daulle makinë tonë, 419 00:23:18,710 --> 00:23:22,640 sepse ne do të përdorim të fundit operator në atë tuple të vogël atje 420 00:23:22,640 --> 00:23:26,330 për të luajtur daulle makinë së bashku me Frere Jacques këngën tonë. 421 00:23:26,330 --> 00:23:28,650 Dhe daulle makinë tonë është do të jetë i pafund. 422 00:23:28,650 --> 00:23:30,920 Ajo thjesht luan përgjithmonë. 423 00:23:30,920 --> 00:23:32,692 Por kënga Frere Jacques nuk është. 424 00:23:32,692 --> 00:23:33,510 Kjo nuk është aq gjatë. 425 00:23:33,510 --> 00:23:36,610 Kjo është vetëm një bare pak. 426 00:23:36,610 --> 00:23:43,030 Pra, ne kemi nevojë për të ndaluar daulle makine si Sapo vjen vlera e shkurtër muzikore 427 00:23:43,030 --> 00:23:43,700 në një fund. 428 00:23:43,700 --> 00:23:46,980 Dhe kjo operator infixed është super e dobishme me atë. 429 00:23:46,980 --> 00:23:50,090 >> Dhe infiks simbol si kjo është lloj i bukur, 430 00:23:50,090 --> 00:23:57,095 sepse thonë se ju keni një funksion si të japin kuotën, i cili i jep ndarjen numër i plotë 431 00:23:57,095 --> 00:24:01,010 e x nga diçka else-- keq, që duhet të jetë një dhe b. 432 00:24:01,010 --> 00:24:04,740 Ju mund të shkruani atë si një kuotë e b. 433 00:24:04,740 --> 00:24:09,670 Pra, nëse ju element put-- është një tjetër shembull i kësaj. 434 00:24:09,670 --> 00:24:14,730 x element në disa listë, në qoftë se ju vendosni ajo në Backticks, ju mund ta përdorni atë. 435 00:24:14,730 --> 00:24:20,400 Edhe pse kjo nuk është një simbol si plus ose minus apo kohë, 436 00:24:20,400 --> 00:24:24,630 ju mund të përdorni emrin e një funksion si kjo në Backticks 437 00:24:24,630 --> 00:24:27,045 si operator Infiks, e cila është pretty cool. 438 00:24:27,045 --> 00:24:29,670 CONNOR HARRIS: Përsëri, kjo është të gjitha sheqer vetëm sintaktik, me të vërtetë. 439 00:24:29,670 --> 00:24:32,310 Kjo nuk ndikon në thelbin e gjuhës. 440 00:24:32,310 --> 00:24:37,440 >> STEPHEN KREWSON: Pra, ne shohim këtu për fraza e fundit e Frere Jacques këngës sonë, 441 00:24:37,440 --> 00:24:45,740 Kam luajtur disa chords të vogla ose tretat duke përbërjen paralel 442 00:24:45,740 --> 00:24:46,240 operatori. 443 00:24:46,240 --> 00:24:50,680 444 00:24:50,680 --> 00:24:54,950 Kjo është një tjetër mënyrë për të thënë disa nga ajo që ne kemi qenë vetëm duke thënë. 445 00:24:54,950 --> 00:24:59,986 Kështu që ju mund të hartë funksionet e një argument mbi listat. 446 00:24:59,986 --> 00:25:02,860 CONNOR HARRIS: Përsëri, referencat për tekstet Haskell-- hyrëse 447 00:25:02,860 --> 00:25:04,680 do të ketë të gjitha këto në të. 448 00:25:04,680 --> 00:25:07,790 >> STEPHEN KREWSON: Kështu që këtu është një goxha Linja kryesore e hap sequencer 449 00:25:07,790 --> 00:25:12,820 ne do të hedhim një vështrim në përdorimin e një listë të kuptuarit. 450 00:25:12,820 --> 00:25:17,810 Dhe ne shohim këtu është se elementi në operator të caktuar në thonjëza prapa. 451 00:25:17,810 --> 00:25:23,030 Kështu që nëse x është një element i lista e x-së, atëherë ne do të thërrasë deri funksionet Perc. 452 00:25:23,030 --> 00:25:25,100 Pra Perc është vetëm një funksion trokitje. 453 00:25:25,100 --> 00:25:30,200 Ajo merr disa p vlerash që është një pjesë e të gjithë set kufizohet 454 00:25:30,200 --> 00:25:35,310 tingujt e ndryshme goditje që pamë në një rrëshqitje të mëparshme, 455 00:25:35,310 --> 00:25:38,840 dhe pastaj ajo i jep se Kohëzgjatja e një shënim çerek. 456 00:25:38,840 --> 00:25:43,190 Tjetër ajo jep një QNR, dhe QNR është vetëm një tjetër shënim çerek. 457 00:25:43,190 --> 00:25:44,970 >> Pra, kjo është ndërtuar diçka të mirë. 458 00:25:44,970 --> 00:25:52,110 Ne kemi një listë të elementeve, dhe ne do të lak mbi një listë nga një 459 00:25:52,110 --> 00:25:54,540 me vlerën max e hap sequencer tonë. 460 00:25:54,540 --> 00:25:58,290 Dhe kur ne jemi në një i veçantë në se lista e njërit në vlerën max, 461 00:25:58,290 --> 00:26:02,970 në qoftë se kjo i është një anëtar i kësaj set e krijuar në këtë funksion, 462 00:26:02,970 --> 00:26:06,040 mirë, atëherë ne kthejnë atë në një shënim goditje. 463 00:26:06,040 --> 00:26:10,960 Përndryshe, ne vetëm të luajë një tjetër, i cili do të thotë, ne vetëm heshtin. 464 00:26:10,960 --> 00:26:16,050 Dhe ne mund të shohim këtu se në kjo kuptuarit sintaksë listë, 465 00:26:16,050 --> 00:26:20,030 x është e populluar nga kjo Lista ndërtuar një 466 00:26:20,030 --> 00:26:22,462 të madhësisë globale të sequencer. 467 00:26:22,462 --> 00:26:23,295 CONNOR HARRIS: Po. 468 00:26:23,295 --> 00:26:26,340 Sintaksa themelor për comprehensions Lista është 469 00:26:26,340 --> 00:26:30,810 kllapa, vlera e përfshirë disa variabla, bar, 470 00:26:30,810 --> 00:26:34,260 vlerat e mundshme të variablave vetë, mbyllur kllapa. 471 00:26:34,260 --> 00:26:38,545 Dhe në qoftë se ju keni bërë vendosur ndërtues shënim në çdo lloj klasë të matematikës, 472 00:26:38,545 --> 00:26:45,999 ju mund të keni vendosur 2n tilla që n është në ose n eshte ne z. 473 00:26:45,999 --> 00:26:48,290 Ngjashëm thing-- këtë simbol është menduar të jetë në mendje 474 00:26:48,290 --> 00:26:49,630 e atij simbol matematikore. 475 00:26:49,630 --> 00:26:51,880 STEPHEN KREWSON: Dhe ju mund të zbatohen kallëzuesit të shumta 476 00:26:51,880 --> 00:26:56,250 dhe filtra të shumta në një listë kuptuarit, e cila është mjaft e bukur. 477 00:26:56,250 --> 00:27:01,800 Algjebrike ne types-- nuk do të zgjatem shumë kohë këtu. 478 00:27:01,800 --> 00:27:04,840 Nuk është një ide e mirë në Haskell ose një të mirë, nocion i dukshëm 479 00:27:04,840 --> 00:27:10,720 se si për të marrë, të themi, një default parametër në një funksion apo diçka. 480 00:27:10,720 --> 00:27:13,370 Në Python, kjo është mjaft e lehtë. 481 00:27:13,370 --> 00:27:18,460 Ju mund të them vetëm me barabartë në deklarimi i funksionit, 482 00:27:18,460 --> 00:27:21,420 një vlerë e parazgjedhur në Rasti asnjëri është furnizuar. 483 00:27:21,420 --> 00:27:27,010 >> Në Haskell, ju mund ndoshta përdorin ndoshta ndoshta lloji, 484 00:27:27,010 --> 00:27:32,190 i cili merr ose asgjë ose një vlerë e tipit vetëm një. 485 00:27:32,190 --> 00:27:38,630 Pra, ne shfrytëzuar këtë në daulle makinë të na lejojë të japin volum opsional 486 00:27:38,630 --> 00:27:40,730 parametrat në secilin prej daulle pjesë. 487 00:27:40,730 --> 00:27:46,160 488 00:27:46,160 --> 00:27:54,680 Kështu që na jep një mënyrë për të pasurit EQ ose një vëllim në një kanal të veçantë. 489 00:27:54,680 --> 00:27:56,440 >> CONNOR HARRIS: Në shembuj të tjerë Haskell, 490 00:27:56,440 --> 00:28:00,450 ju mund të shihni përdorur ndoshta për funksionet që mund të dështojnë. 491 00:28:00,450 --> 00:28:03,470 Kjo është një e përbashkët. 492 00:28:03,470 --> 00:28:07,010 >> STEPHEN KREWSON: Dhe ju mund të furnizimit disa lloj mesazh gabimi si default. 493 00:28:07,010 --> 00:28:11,020 Dhe kjo është veçanërisht i dobishëm kur ju jeni duke bërë I / O në Haskell. 494 00:28:11,020 --> 00:28:12,044 Kjo mund të jetë truket. 495 00:28:12,044 --> 00:28:13,960 CONNOR HARRIS: ose për një shembull i ngjashëm, mendoj 496 00:28:13,960 --> 00:28:17,460 e një funksion që përfshin ndarjen e një parametër që mund të jetë 0. 497 00:28:17,460 --> 00:28:20,020 Dhe se funksioni mund kthehen ndoshta çfarëdo. 498 00:28:20,020 --> 00:28:22,802 Pra, nëse nuk ka ndarje nga 0, ajo do të kthehet vetëm çfarëdo. 499 00:28:22,802 --> 00:28:25,010 Dhe në qoftë se nuk ka ndarje nga 0, ajo do të kthehet asgjë 500 00:28:25,010 --> 00:28:26,910 si një mënyrë për të sinjalizuar gabim. 501 00:28:26,910 --> 00:28:30,330 Sepse një pasojë e Typing shumë i rreptë haskell 502 00:28:30,330 --> 00:28:34,100 është se nuk ka asnjë real-- përjashtime janë të vështirë, në thelb, 503 00:28:34,100 --> 00:28:36,160 trajtimin gabim është i vështirë. 504 00:28:36,160 --> 00:28:39,440 Dhe kjo është një shumë Mënyra e zakonshme e bërë atë. 505 00:28:39,440 --> 00:28:42,990 >> STEPHEN KREWSON: Deri tani kemi marrë për gjë tjetër mendje-bending 506 00:28:42,990 --> 00:28:49,160 rreth Haskell, e cila është model përputhen dhe funksion përkufizime. 507 00:28:49,160 --> 00:28:53,390 Unë ju tregoi në rrëshqitje e kaluar Deklarata e sekuencës hap 508 00:28:53,390 --> 00:28:58,170 funksion, e cila mori një vlerë ndoshta, pastaj një int, atëherë një listë e ints, 509 00:28:58,170 --> 00:29:03,850 atëherë kthen një sekuencë e Vlerat muzikore atje Annotated 510 00:29:03,850 --> 00:29:05,375 me të dyja katran dhe vëllimi. 511 00:29:05,375 --> 00:29:08,030 512 00:29:08,030 --> 00:29:11,820 >> Pra, këto tre argumente mund të jenë model krahasohen në mënyrën e mëposhtme. 513 00:29:11,820 --> 00:29:16,660 Dhe ne gjithmonë duan të jenë të sigurt për të të bëjë një rast bazë apo rast daljen e parë. 514 00:29:16,660 --> 00:29:19,690 Dhe këto nënvizon vetëm mund të interpretohet 515 00:29:19,690 --> 00:29:22,340 të thotë çdo vlerë që është atje. 516 00:29:22,340 --> 00:29:26,580 Pra, në qoftë se ne të merrni një thirrje të hap rend me disa vlera, disa vlera të tjera, 517 00:29:26,580 --> 00:29:32,210 dhe pastaj lista bosh, ajo që ne duam për t'u kthyer është vetëm heshtje, një tjetër 0. 518 00:29:32,210 --> 00:29:35,110 >> Dhe në vend të kësaj duke qenë një listë bosh ose 0, 519 00:29:35,110 --> 00:29:38,150 kjo është një tjetër 0, sepse ne jemi që kanë të bëjnë me llojin e muzikës, 520 00:29:38,150 --> 00:29:43,230 dhe lista e zbrazët e muzikës lloj është vetëm një tjetër me kohëzgjatje. 521 00:29:43,230 --> 00:29:45,680 Nuk është muzikë. 522 00:29:45,680 --> 00:29:51,460 Dhe pastaj të shohim nëse ne të merrni një hap rend me një v për argument të vëllimit, 523 00:29:51,460 --> 00:29:57,290 p për instrumentin masë paraprake argumenti, dhe pastaj një listë e X-it. 524 00:29:57,290 --> 00:29:58,360 >> Atëherë ne bëjmë disa gjëra. 525 00:29:58,360 --> 00:30:01,290 Në veçanti, ne aplikojmë kjo kuptuarit listë, 526 00:30:01,290 --> 00:30:05,700 dhe ne të kryejnë disa Operacionet për vlerën ndoshta 527 00:30:05,700 --> 00:30:10,050 për ta kthyer atë në një vlerë numerike në mënyrë që ajo mund të numërohen më pas dhe të përdorura 528 00:30:10,050 --> 00:30:12,300 për të zgjedhur instrumentin. 529 00:30:12,300 --> 00:30:16,730 Përsëri, kjo është pak bit qëllimisht inconcise 530 00:30:16,730 --> 00:30:20,580 vetëm për të treguar të gjitha gjërat pazakontë ju mund të bëni në Haskell si ti 531 00:30:20,580 --> 00:30:23,170 të marrë një vështrim në atë në kohën tuaj. 532 00:30:23,170 --> 00:30:23,802 >> Në rregull. 533 00:30:23,802 --> 00:30:26,010 Pra, ne jemi më në fund duke marrë për bëni atë që ne kemi përcaktuar për të bërë, 534 00:30:26,010 --> 00:30:28,820 i cili është të bëjë disa muzikë kompjuter. 535 00:30:28,820 --> 00:30:32,250 Pra, ne jemi duke shkuar për të përpiqen për të bëjnë këngën Frere Jacques. 536 00:30:32,250 --> 00:30:35,220 Pra, ka sa frazat në Frere Jacques? 537 00:30:35,220 --> 00:30:38,790 538 00:30:38,790 --> 00:30:39,680 Katër. 539 00:30:39,680 --> 00:30:40,460 I madh. 540 00:30:40,460 --> 00:30:42,490 Dhe çfarë është e bukur është se ata janë të gjithë përsëritet 541 00:30:42,490 --> 00:30:46,990 shuma e njëjtë herë, e cila është e dy. 542 00:30:46,990 --> 00:30:50,730 >> Pra, ne kemi katër fraza çdo përsëritet dy herë. 543 00:30:50,730 --> 00:30:53,590 Dhe në mënyrë të veçantë, ata janë në një raund. 544 00:30:53,590 --> 00:30:55,340 Dhe ka shumë, shumë mënyra për të zbatuar 545 00:30:55,340 --> 00:30:57,520 një raund që mund të jetë kënaqësi për të bërë. 546 00:30:57,520 --> 00:31:00,260 Unë e kam bërë atë në një goxha mënyrë e thjeshtë këtu, 547 00:31:00,260 --> 00:31:05,760 e cila është vetëm për construct-- linjën funksion merr një listë të vlerave të muzikës 548 00:31:05,760 --> 00:31:10,390 dhe e kthen atë në përbërjen e vijues duke aplikuar atë përbërjen vijues 549 00:31:10,390 --> 00:31:13,000 operatori. 550 00:31:13,000 --> 00:31:19,540 >> Dhe pastaj unë të vonojë pjesë të ndryshme duke i bërë ata të fillojë me një pushim. 551 00:31:19,540 --> 00:31:22,770 Kështu që unë të fillojë me një tjetër të dy masave, dhe pastaj një tjetër e katër masave, 552 00:31:22,770 --> 00:31:26,160 dhe pastaj një tjetër e gjashtë Masat, dhe pastaj raundi 553 00:31:26,160 --> 00:31:32,290 punon, si ne të gjithë e dimë këtë këngë. 554 00:31:32,290 --> 00:31:37,180 Ne shohim dy Annotations ose modifikimet e vlerave të muzikës 555 00:31:37,180 --> 00:31:43,150 që janë të përmbajtura në këtë vijues rregullimin e elementeve të muzikës. 556 00:31:43,150 --> 00:31:44,810 Ne kemi një vëllim shtoni. 557 00:31:44,810 --> 00:31:48,960 Ky është një funksion të Annotate muzikë me një vëllim të veçantë. 558 00:31:48,960 --> 00:31:51,320 Ky është një shembull i mirë e një sinjal MIDI running 559 00:31:51,320 --> 00:31:57,510 nga 0 deri në 127, shtatë pjesë të informacion që mund të kryhet. 560 00:31:57,510 --> 00:32:00,650 >> Dhe then-- pamë atë shumë shkurtimisht, por MIDI përgjithshme 561 00:32:00,650 --> 00:32:02,310 Lista e të gjitha instrumenteve të ndryshme. 562 00:32:02,310 --> 00:32:04,450 Dhe nuk është një tërësi shumë prej tyre. 563 00:32:04,450 --> 00:32:11,230 Në qoftë se ju përdorni një workstation digital audio, si Ableton Live apo Tools Pro, 564 00:32:11,230 --> 00:32:17,560 ka një gamë të gjerë tepër e sintisajzerë dhe instrumenteve VST. 565 00:32:17,560 --> 00:32:21,510 Por standardi MIDI vetëm ka një duzinë pak, apo disa. 566 00:32:21,510 --> 00:32:22,799 Dhe disa prej tyre janë qesharake. 567 00:32:22,799 --> 00:32:25,840 Mendova se do të ishte kënaqësi nëse kemi luajtur instrumenti instrument MIDI 568 00:32:25,840 --> 00:32:30,550 helikopter, dhe pastaj Mënyrë tjetër përmes raundit të, 569 00:32:30,550 --> 00:32:37,980 ne e bëmë një synth jastëk, dhe pastaj i kjo të çojë banal valë katror synth, 570 00:32:37,980 --> 00:32:44,240 dhe pastaj zë rrjedh, të cilat janë një pak i paqartë në MIDI mia të këqija 571 00:32:44,240 --> 00:32:46,410 Synthesizer, por ata OK. 572 00:32:46,410 --> 00:32:50,030 >> Dhe pastaj ne e shohim këtë le dhe në sintaksë nga Haskell, 573 00:32:50,030 --> 00:32:54,030 dhe pastaj ne jemi duke luajtur të gjitha këto pjesë së bashku 574 00:32:54,030 --> 00:32:56,265 me operatorin paralel përbërjen. 575 00:32:56,265 --> 00:33:00,260 576 00:33:00,260 --> 00:33:02,296 Dhe ne me siguri mund të tregojmë disa nga kjo. 577 00:33:02,296 --> 00:33:07,674 578 00:33:07,674 --> 00:33:08,340 Këtu është kodi. 579 00:33:08,340 --> 00:33:14,960 Dhe ju mund të shihni në C, atje do të jetë një shumë e pastrimit fyt dhe vendosjen 580 00:33:14,960 --> 00:33:19,760 kodi tryezë para jush mund të bëjë muzikë si kjo. 581 00:33:19,760 --> 00:33:22,080 Apo ndonjë tjetër programimi gjuhë, ju ndoshta do të 582 00:33:22,080 --> 00:33:27,210 duhet për të bashkëvepruar me një lloj të bibliotekë ose API dhe ngritur çdo gjë lart, 583 00:33:27,210 --> 00:33:28,725 dhe pastaj ju do të keni për të pastruar. 584 00:33:28,725 --> 00:33:33,810 Por këtu në Haskell është, unë mendoj se, një herë ju merrni ul receptorin e telefonit të tij, tepër të 585 00:33:33,810 --> 00:33:35,770 lexueshëm dhe shumë ekspresive. 586 00:33:35,770 --> 00:33:38,930 587 00:33:38,930 --> 00:33:43,240 Pra, nuk është zbatimi e Frere Jacques. 588 00:33:43,240 --> 00:33:43,740 Në rregull. 589 00:33:43,740 --> 00:33:47,557 Tani ne duam të shtoni perkusion, dhe kjo është një çrregullt pak. 590 00:33:47,557 --> 00:33:49,015 Pra, le të marrin një vështrim në slides. 591 00:33:49,015 --> 00:33:56,880 592 00:33:56,880 --> 00:34:00,540 Pra, ideja e madhe është që të bëjë një bandë e listave apo pjesë. 593 00:34:00,540 --> 00:34:04,140 Në ato roll-në makina, atje ishin zakonisht rreth ndoshta tetë 594 00:34:04,140 --> 00:34:08,670 10 ritmin apo goditje pjesë. 595 00:34:08,670 --> 00:34:10,159 Dhe pastaj të përdorin një bandë e teknikave. 596 00:34:10,159 --> 00:34:14,889 Dhe ne kemi biseduar për these-- përdorimit folds, filtra, funksionet lambda, 597 00:34:14,889 --> 00:34:19,429 plotësisht mbi listat për të gjeneruar vlerat në një gamë 1 deri R, R është 16, 598 00:34:19,429 --> 00:34:20,699 ose 32 hapa në sequencer. 599 00:34:20,699 --> 00:34:23,810 600 00:34:23,810 --> 00:34:29,920 >> Dhe pastaj në qoftë se ka një vlerë në atë listë si ne jemi kalon nëpër sequencer, 601 00:34:29,920 --> 00:34:34,190 running nëpërmjet saj mbi dhe mbi, ajo kthehet në atë shënim, 602 00:34:34,190 --> 00:34:36,060 dhe kjo mostër merr shkaktuar. 603 00:34:36,060 --> 00:34:42,810 604 00:34:42,810 --> 00:34:47,110 Këtu janë të gjitha mënyrat e ndryshme të pazakontë Unë kam ardhur deri me të gjeneruar shënime. 605 00:34:47,110 --> 00:34:48,940 Provoni atë në vetë shumë tuaj gjysmë. 606 00:34:48,940 --> 00:34:50,360 Ajo do të tingëllojë ftohtë. 607 00:34:50,360 --> 00:34:53,066 608 00:34:53,066 --> 00:34:54,690 Koha e lejuar, ne do të kalojnë nëpër këtë. 609 00:34:54,690 --> 00:34:59,200 Por për tani, unë mendoj ne duhet të demo atë që kemi. 610 00:34:59,200 --> 00:35:01,380 Le të shpresojmë se kjo shkon në rregull. 611 00:35:01,380 --> 00:35:02,670 >> Pra, kjo është GHCI. 612 00:35:02,670 --> 00:35:06,580 613 00:35:06,580 --> 00:35:09,121 Dhe ne do të ngarkuar një fotografi Unë kam quajtur song.lhs, 614 00:35:09,121 --> 00:35:10,620 që është skedari unë vetëm ju tregoi. 615 00:35:10,620 --> 00:35:11,470 OK, e madhe. 616 00:35:11,470 --> 00:35:15,010 Siç Connor tha më parë, ajo përpiluar, ajo tipit kontrolluar, 617 00:35:15,010 --> 00:35:18,380 kështu që unë mund të marr frymë një shumë më e lehtë. 618 00:35:18,380 --> 00:35:20,010 Kjo nuk do të hedhur në erë mbi mua. 619 00:35:20,010 --> 00:35:22,720 >> Unë dua të ju tregojë diçka të dobishme. 620 00:35:22,720 --> 00:35:25,900 Ju mund të shihni se një Moduli ngarkuar quajtur 50. 621 00:35:25,900 --> 00:35:28,240 Ju mund te shfletoni këtë modul. 622 00:35:28,240 --> 00:35:32,092 Dhe kjo është aq e bukur për doing-- ndoshta çfarë 623 00:35:32,092 --> 00:35:34,550 ju jeni duke bërë në Haskell nuk është quajtur krijimin e programeve kompjuterike, 624 00:35:34,550 --> 00:35:36,980 por ju mund të bëni një shumë të gjëra të fun në tuaj. 625 00:35:36,980 --> 00:35:42,410 Dhe punës është me të vërtetë e bukur si në krahasim me shumë gjuhë të tjera, 626 00:35:42,410 --> 00:35:45,872 sepse ju mund të shihni në një të vërtetë mënyrë të lexueshme se çfarë po ndodh. 627 00:35:45,872 --> 00:35:47,830 Pra, ne shohim se ne kemi të gjitha këto fraza, të cilat 628 00:35:47,830 --> 00:35:53,760 janë listat e pitches muzikës, dhe pastaj ne ndërtuar këto deri në diçka më të madhe, 629 00:35:53,760 --> 00:35:55,220 e cila është një këngë muzikë. 630 00:35:55,220 --> 00:35:58,450 Kjo është një njësi muzikore. 631 00:35:58,450 --> 00:36:05,545 Dhe pastaj ne mund të luajë këtë të gjithë me një funksion të quajtur luajnë muzikë. 632 00:36:05,545 --> 00:36:09,040 Ju mund të shihni se këtu poshtë. 633 00:36:09,040 --> 00:36:11,310 E cila është vetëm luajnë. 634 00:36:11,310 --> 00:36:15,040 >> Unë duhet të say-- unë nuk flas për kjo shenjë dollar kjo është kudo. 635 00:36:15,040 --> 00:36:17,980 Shenjë Dollar është një tjetër operator infiks. 636 00:36:17,980 --> 00:36:22,500 Por ajo ka përparësi më të ulët e çdo operator, i cili në fakt 637 00:36:22,500 --> 00:36:24,960 do të thotë se çdo gjë në e majta e shenjës dollarit 638 00:36:24,960 --> 00:36:28,460 dhe e drejta e shenjës së dollarit, ne jemi duke shkuar për të vlerësuar para saj. 639 00:36:28,460 --> 00:36:31,430 Pra, kjo është lloj i si një tjetër Mënyra e shtuar kllapa. 640 00:36:31,430 --> 00:36:33,980 641 00:36:33,980 --> 00:36:36,220 >> CONNOR HARRIS: Kjo është në thelb Përbërja funksion. 642 00:36:36,220 --> 00:36:40,026 Dhe siguron që ju të mos have-- nëse ju kanë funksione të dyja anët ose Infiks 643 00:36:40,026 --> 00:36:42,900 Operatorët në të dyja anët, ata nuk do të shoqërojnë të gjithë atë dhe ju jap 644 00:36:42,900 --> 00:36:46,030 Rezultatet e papritura. 645 00:36:46,030 --> 00:36:49,790 >> STEPHEN KREWSON: Pra, ne can-- përdorur atë, ne mund të telefononi. 646 00:36:49,790 --> 00:36:51,415 Së pari, ne do të luajnë atë pa bateri. 647 00:36:51,415 --> 00:37:00,330 648 00:37:00,330 --> 00:37:03,170 Kjo është helikopter, helikopter MIDI. 649 00:37:03,170 --> 00:37:05,495 >> [Muzika] 650 00:37:05,495 --> 00:37:08,525 651 00:37:08,525 --> 00:37:09,525 Ka vala katrore. 652 00:37:09,525 --> 00:37:24,520 653 00:37:24,520 --> 00:37:25,490 Zëri rrjedh. 654 00:37:25,490 --> 00:37:27,630 Dhe ju mund të vërtetë të shkojnë të egra me këtë. 655 00:37:27,630 --> 00:37:30,872 I kap një të shumë e thjeshtë, sepse unë e dija se nuk duhet të kafshoj 656 00:37:30,872 --> 00:37:31,830 më shumë se unë mund të bëj. 657 00:37:31,830 --> 00:37:36,460 Vetëm mbani atë shumë e thjeshtë për të treguar idetë kryesore. 658 00:37:36,460 --> 00:37:39,952 Por pastaj unë kam qenë si, ne kemi mori për të shtoni disa bateri për këtë. 659 00:37:39,952 --> 00:37:41,910 Vetëm për shkak se kjo është një pak i padepërtueshëm, 660 00:37:41,910 --> 00:37:45,790 dhe unë nuk e ka përdorur Emri i daulle pjesë, 661 00:37:45,790 --> 00:37:49,490 Unë plotësisht, porsi sepse ata janë pjesë e asaj klase numerizuar, 662 00:37:49,490 --> 00:37:51,500 Unë plotësisht ato për ints. 663 00:37:51,500 --> 00:37:53,120 Njëra është si një daulle bas. 664 00:37:53,120 --> 00:37:54,370 Zero është si. 665 00:37:54,370 --> 00:37:56,000 Shtatë është një kapelë të lartë. 666 00:37:56,000 --> 00:38:00,920 Dhe poshtë në këtu ku Funksionet e merrni pak më shumë të rastit, 667 00:38:00,920 --> 00:38:02,100 këto janë si bateri conga. 668 00:38:02,100 --> 00:38:08,360 >> Pra, nëse ju mendoni se? Për ndoshta një mënyrë interesante për të zbatuar një makinë daulle 669 00:38:08,360 --> 00:38:12,830 është që të përdorin shumë rregullt modelet në bas daulle tuaj. 670 00:38:12,830 --> 00:38:17,640 Kështu për shembull, në filtrimin mbi të Lista me çdo gjë që i jep përsëri 671 00:38:17,640 --> 00:38:20,590 një 1 kur ajo është marrë modul 04. 672 00:38:20,590 --> 00:38:27,190 Kështu që unë të marrë 1, 5, 9, 13, 17-- kështu që kjo është mundi i parë i çdo mase. 673 00:38:27,190 --> 00:38:32,860 >> Dhe pastaj kjo është e njëjtë gjë zhvendosur gjatë dy hapa. 674 00:38:32,860 --> 00:38:33,850 Pra, kjo është Offbeat. 675 00:38:33,850 --> 00:38:37,480 Pra, kjo do të jetë diçka si një kapelë të lartë. 676 00:38:37,480 --> 00:38:39,640 Dhe pastaj përsëri, këtu poshtë, kjo është pak e rastit, 677 00:38:39,640 --> 00:38:41,080 sepse ne jemi duke bërë bateri Conga. 678 00:38:41,080 --> 00:38:44,180 Dhe unë kam disa maracas poshtë këtu, too. 679 00:38:44,180 --> 00:38:50,280 >> Kështu që unë mund të telefononi luajë daulle makine, por ajo do të vazhdojë përgjithmonë, 680 00:38:50,280 --> 00:38:53,700 dhe kjo mund të fillojnë grabbing deri të gjithë kujtesës në sistemin tim. 681 00:38:53,700 --> 00:38:57,090 Kështu që unë do të thërrasë këtë funksion të luajë muzikë, e cila si ne do të shohim, 682 00:38:57,090 --> 00:39:02,020 përdorin përbërjen paralele truncating për të luajtur pak këngën tonë Frere Jacques 683 00:39:02,020 --> 00:39:04,200 së bashku me këtë daulle makinë pazakontë. 684 00:39:04,200 --> 00:39:06,190 Pra, le të marrin një vështrim. 685 00:39:06,190 --> 00:39:10,920 Dhe ju lutem mos përmirësuar tim marrëveshje të gjitha pjesët e daulle. 686 00:39:10,920 --> 00:39:13,375 Jo specialiteti im, por unë pasur një shumë të fun bërë atë. 687 00:39:13,375 --> 00:39:17,678 688 00:39:17,678 --> 00:39:20,654 >> [Muzika] 689 00:39:20,654 --> 00:39:52,260 690 00:39:52,260 --> 00:39:56,980 >> Pra, natyrisht, kjo është e gjitha një jo pak si argëtim 691 00:39:56,980 --> 00:40:01,100 në qoftë se ne nuk mund ta kthyer atë në një rezultat kaq ndoshta atë 692 00:40:01,100 --> 00:40:04,650 mund të interpretohen nga një interpretues të njeriut. 693 00:40:04,650 --> 00:40:06,535 Kështu që unë nuk do të kandidojë atë këtu. 694 00:40:06,535 --> 00:40:07,910 Unë e kam gjeneruar tashmë dosjet. 695 00:40:07,910 --> 00:40:10,280 Ju mund të shihni se ka një dot LilyPond file-- dhe kjo 696 00:40:10,280 --> 00:40:14,500 do të jetë Segue tim mbi të Connor-- dhe një skedar dot MIDI, 697 00:40:14,500 --> 00:40:18,610 dhe një skedë PDF dot, e cila është ajo LilyPond në fund të fundit do të gjenerojë. 698 00:40:18,610 --> 00:40:23,770 >> Por këto janë ato Scripts, dhe unë do të vetëm drejtuar ata me mundësitë e tyre të ndihmojnë. 699 00:40:23,770 --> 00:40:28,090 Nëse ju merrni këto dhe drejtimin me Euterpea, ju mund të gjenerojnë një fotografi MIDI. 700 00:40:28,090 --> 00:40:31,160 Dhe pastaj nga file MIDI me këtë program MIDI 2LY, 701 00:40:31,160 --> 00:40:34,930 ju mund të gjenerojnë një Lily Skedar pellg, dhe pastaj ju 702 00:40:34,930 --> 00:40:37,974 mund të gjenerojnë një PDF rezultatin. 703 00:40:37,974 --> 00:40:39,390 Dhe ne duhet të hidhni një sy në këtë. 704 00:40:39,390 --> 00:40:52,599 705 00:40:52,599 --> 00:40:55,140 Pra, Connor ndoshta do të tregojë se si të Annotate këtë më mirë, 706 00:40:55,140 --> 00:41:02,570 por kjo është Frere Jacques si gjeneruar nga mua në Euterpea. 707 00:41:02,570 --> 00:41:07,300 Është vetëm në C. unë duhet të ketë realizuar artistikisht se çfarë hack është e vërtetë në. 708 00:41:07,300 --> 00:41:11,090 Por që është gazsjellësi për si ju bëni atë me atë. 709 00:41:11,090 --> 00:41:12,950 Le të flasim më shumë për LilyPond. 710 00:41:12,950 --> 00:41:15,780 >> CONNOR HARRIS: OK Le të shohim. 711 00:41:15,780 --> 00:41:19,480 712 00:41:19,480 --> 00:41:21,419 A e keni përmendur Mëso You Haskell? 713 00:41:21,419 --> 00:41:22,460 STEPHEN KREWSON: Oh yeah. 714 00:41:22,460 --> 00:41:23,480 Check out Mësoni Ju Haskell. 715 00:41:23,480 --> 00:41:24,410 Është në burimet. 716 00:41:24,410 --> 00:41:26,830 Kjo është se si kam filluar të mësuarit, dhe kjo është e madhe. 717 00:41:26,830 --> 00:41:27,580 Mësimi nuk memec. 718 00:41:27,580 --> 00:41:28,829 >> CONNOR HARRIS: Pra, kjo është online. 719 00:41:28,829 --> 00:41:34,760 Pra, një djalë i quajtur [e padëgjueshme] learnyouahaskell.com, nuk ka hapësira. 720 00:41:34,760 --> 00:41:37,065 Gramatika është i sëmurë. 721 00:41:37,065 --> 00:41:38,690 STEPHEN KREWSON: Kjo është ilustruar, too. 722 00:41:38,690 --> 00:41:39,440 CONNOR HARRIS: Pra, çfarë është LilyPond? 723 00:41:39,440 --> 00:41:42,480 Kjo është një programimit deklarative gjuhë për radhitje e muzikës. 724 00:41:42,480 --> 00:41:45,480 Kështu që ju mund të declarative-- mendoj për gjëra të tilla si HTML, 725 00:41:45,480 --> 00:41:50,900 ku ju nuk jeni saying-- HTML nuk do të thotë se si shfletues web duhet 726 00:41:50,900 --> 00:41:52,180 e bëjnë faqet e hap pas hapi. 727 00:41:52,180 --> 00:41:54,096 Kjo është vetëm duke thënë se kjo është një përshkrim tekstuale 728 00:41:54,096 --> 00:41:56,100 të asaj që ju dëshironi faqe duken si. 729 00:41:56,100 --> 00:41:59,310 >> Dhe pastaj kjo është gjithashtu një program që harton këtë gjuhë, 730 00:41:59,310 --> 00:42:02,300 ose lexuar në e saj dhe pastaj në fakt bën radhitje për ju, 731 00:42:02,300 --> 00:42:05,570 dhe ajo pështyn nga këto mrekullueshme në kërkim rezultatet PDF. 732 00:42:05,570 --> 00:42:08,250 Ju gjithashtu mund të merrni formatin PNG apo çfarëdo. 733 00:42:08,250 --> 00:42:10,300 Një mënyrë e mirë për të menduar e kjo është analogji 734 00:42:10,300 --> 00:42:16,620 është se LaTeX është lloj i si LillyPond, por vetëm për radhitje të zakonshëm. 735 00:42:16,620 --> 00:42:20,360 Pra, në vend of-- kjo nuk është WYSIWYG: Çfarë ju shikoni 736 00:42:20,360 --> 00:42:22,960 A është ajo që ju merrni, si, të themi Finale është, ose Sibelius, 737 00:42:22,960 --> 00:42:27,430 ose Microsoft Word, ku ju mund të shtypni në kohë reale dhe draft gjëra në kohë reale 738 00:42:27,430 --> 00:42:31,340 dhe të shohim ndryshime menjëherë. 739 00:42:31,340 --> 00:42:32,140 >> Ajo është e bazuar teksti. 740 00:42:32,140 --> 00:42:35,290 Ju duhet të përpilojnë tuaj rezultatet duke përdorur një program të veçantë 741 00:42:35,290 --> 00:42:37,090 dhe për të marrë jashtë PDF vonë. 742 00:42:37,090 --> 00:42:43,320 Kjo është pak më pak i përshtatshëm për përdorim në qoftë se ju jeni 743 00:42:43,320 --> 00:42:46,520 duke u përpjekur për të shkruar direkt në një rezultat dhe ju jeni 744 00:42:46,520 --> 00:42:48,620 duke u përpjekur të shkruaj në kompjuter. 745 00:42:48,620 --> 00:42:50,830 Por ka shumë avantazhe për të. 746 00:42:50,830 --> 00:42:56,110 Një, kjo nuk duket një shumë nicer, sepse LillyPond mund të vërtetë 747 00:42:56,110 --> 00:42:58,210 marrë kohë për të bërë Vendimet faqosje siç duhet, 748 00:42:58,210 --> 00:43:02,380 ndryshe nga Sibelius ose Finales, të cilat kanë për të bërë algoritme të kompromentuar kështu 749 00:43:02,380 --> 00:43:05,020 që ata mund të shfaqin gjërat në kohë reale. 750 00:43:05,020 --> 00:43:07,660 >> Pra, pse është LilyPond-- grafika kompjuterike është e vështirë. 751 00:43:07,660 --> 00:43:10,535 Nëse ju jeni duke bërë diçka me muzikë dhe ju doni të shkruani nga rezultatet, 752 00:43:10,535 --> 00:43:13,900 ju nuk doni të shkruani gjithçka me veten 753 00:43:13,900 --> 00:43:19,040 duke filluar me atë se si për të nxjerrë shtabet dhe sa për të nxjerrë notepads. 754 00:43:19,040 --> 00:43:21,020 Është shumë e vështirë. Ajo është bërë më parë. 755 00:43:21,020 --> 00:43:22,170 Ju jeni të mirë. 756 00:43:22,170 --> 00:43:26,200 >> Nëse ju doni të përdorni Finale ose Sibelius, Formatet e skedarëve për ato gjëra 757 00:43:26,200 --> 00:43:30,180 janë shumë të komplikuara, dhe ju nuk mund të me të vërtetë përdorin ato programuar. 758 00:43:30,180 --> 00:43:35,020 Ju mund të hapur deri Sibelius me Finales dhe shkoni tek File, Eksport si PDF veten, 759 00:43:35,020 --> 00:43:37,600 por ju nuk mund të vërtetë thirrur që nga një script. 760 00:43:37,600 --> 00:43:40,440 LillyPond, ju mund të telefononi nga ato Scripts. 761 00:43:40,440 --> 00:43:44,397 Ju mund lehtë të iterate LillyPond me latex. 762 00:43:44,397 --> 00:43:47,230 Unë nuk do të ketë se shumë kohë për të shkuar në këto teknologji të drejtë tani, 763 00:43:47,230 --> 00:43:48,321 por ato ekzistojnë. 764 00:43:48,321 --> 00:43:50,070 Nëse ju doni të shikoni në një libër LillyPond, 765 00:43:50,070 --> 00:43:53,760 është një program që vjen me Shpërndarja juaj LillyPond, 766 00:43:53,760 --> 00:43:57,030 dhe kjo është për iterating Fragmente LillyPond në LaTeX 767 00:43:57,030 --> 00:44:00,340 në qoftë se ju doni të bëni diçka si një dokument i madh muzikologji 768 00:44:00,340 --> 00:44:02,289 me shembuj, për shembull. 769 00:44:02,289 --> 00:44:04,580 Dhe kjo është një aftësi e mirë për Jeta në qoftë se ju jeni duke bërë diçka 770 00:44:04,580 --> 00:44:05,770 me muzikë, jo vetëm CS50. 771 00:44:05,770 --> 00:44:09,320 Unë e kam përdorur LillyPond për të gjithë nga projektet e mia përbërjen 772 00:44:09,320 --> 00:44:11,880 pasi që unë ishte në thelb një i lartë në shkollë të mesme. 773 00:44:11,880 --> 00:44:13,455 >> Pra, këtu janë disa shembuj të thjeshtë. 774 00:44:13,455 --> 00:44:17,490 775 00:44:17,490 --> 00:44:21,060 Kjo është në thelb përfaqësues nga niveli i vështirësisë 776 00:44:21,060 --> 00:44:23,481 që shumica e njerëzve do të përballen me atë që ata ishin duke u përpjekur 777 00:44:23,481 --> 00:44:24,980 për të përdorur LilyPond për projekte të thjeshta. 778 00:44:24,980 --> 00:44:29,519 Kjo para është fillimi në një prelud Chorale nga Bach. 779 00:44:29,519 --> 00:44:31,810 Kjo në fund është një ekstrakt nga një nga veprat e mia, 780 00:44:31,810 --> 00:44:34,650 dhe kjo është vetëm atje për të treguar ju gjëra të tilla si [e padëgjueshme] 781 00:44:34,650 --> 00:44:38,550 vënë linja të shumta në të njëjtën Stafi, si lirike undersetting funksionon. 782 00:44:38,550 --> 00:44:41,350 783 00:44:41,350 --> 00:44:46,110 Nënshtresat Lyric janë një gjë që është shumë e lehtë për t'u përdorur LilyPond për muzikën korale. 784 00:44:46,110 --> 00:44:48,814 >> Dhe kështu pastaj ka disa më shumë Shembuj të komplikuara këtu. 785 00:44:48,814 --> 00:44:50,980 Të gjitha këto janë bërë në LilyPond dhe ata janë të realizueshme. 786 00:44:50,980 --> 00:44:55,280 Ky ekstrakt i parë është nga [Padëgjueshme] nga [e padëgjueshme]. 787 00:44:55,280 --> 00:44:58,860 Dhe kjo [e padëgjueshme] nga një pjesë për bas solo 788 00:44:58,860 --> 00:45:03,550 flaut nga [e padëgjueshme], i cili është një longtime-- që 789 00:45:03,550 --> 00:45:07,101 ishte anëtar i vjetër i Departamenti muzikë këtu, unë mendoj. 790 00:45:07,101 --> 00:45:08,600 Unë nuk jam i sigurt ku ai ka shkuar jashtë për të. 791 00:45:08,600 --> 00:45:12,410 Por ai ishte këshilltar i Harvardit Shoqata kompozitorë për një kohë të gjatë. 792 00:45:12,410 --> 00:45:13,530 Njeri i mrekullueshëm. 793 00:45:13,530 --> 00:45:16,920 Ai shkruan disa muzikë që ka shumë simbol i komplikuar se LillyPond 794 00:45:16,920 --> 00:45:20,500 megjithatë mund të trajtojë shumë të bukur. 795 00:45:20,500 --> 00:45:26,030 >> Pra, vetëm për të ju jap një kuptim të asaj që aftësitë kjo gjë e are-- kështu 796 00:45:26,030 --> 00:45:28,960 brendësitë e LillyPond janë shumë të komplikuara. 797 00:45:28,960 --> 00:45:31,060 Dhe ju mund ta përdorni atë për një kohë të gjatë, duke përfshirë 798 00:45:31,060 --> 00:45:32,520 për disa goxha e komplikuar gjëra, pa të vërtetë 799 00:45:32,520 --> 00:45:34,060 pasur nevojë të dinë shumë rreth tyre. 800 00:45:34,060 --> 00:45:38,720 Por ideja themelore është se mbi Niveli më i ulët, atomet e LillyPonds 801 00:45:38,720 --> 00:45:39,970 janë shënimet. 802 00:45:39,970 --> 00:45:42,761 Shënimet përmbajnë një Konteksti quajtur zëra. 803 00:45:42,761 --> 00:45:44,510 Pra, në kontekstin e zërit kryesisht i korrespondon 804 00:45:44,510 --> 00:45:47,410 në një linjë të vetme të polifonisë. 805 00:45:47,410 --> 00:45:49,410 Dhe pastaj konteksti mund të jetë përmbante hierarkike 806 00:45:49,410 --> 00:45:53,590 në ato të nivelit të lartë që përfaqësojnë shtabet mbi rezultatin 807 00:45:53,590 --> 00:45:56,750 apo grupimet më të mëdha të tilla si shtabet piano apo shtabet choir, 808 00:45:56,750 --> 00:45:58,990 dhe pastaj përfundimisht tërë kontekste të shënuar. 809 00:45:58,990 --> 00:46:02,260 Dhe ju në fakt mund të përfshijë Rezultatet e shumta në një libër. 810 00:46:02,260 --> 00:46:05,770 >> Dhe çdo kontekst ka një Numri i engravers bashkangjitur. 811 00:46:05,770 --> 00:46:08,340 Nëse ju shikoni përmes Përmbajtja e një kontekst 812 00:46:08,340 --> 00:46:14,410 dhe printoni një simbol të caktuar ose një klasë të caktuar të simboleve si e nevojshme. 813 00:46:14,410 --> 00:46:17,840 Pra, për çdo kontekst zë, nuk ka [padëgjueshme] shënime 814 00:46:17,840 --> 00:46:24,270 gdhendës që është në thelb një funksion ose një objekt që shkruan nga të gjitha shënim të 815 00:46:24,270 --> 00:46:26,290 kokat mbi pjesët e drejtë të një faqe. 816 00:46:26,290 --> 00:46:29,510 Pastaj ka një gdhendës çarë, e cila shkruan nga të çarat në stafin. 817 00:46:29,510 --> 00:46:31,517 Pastaj ka një metronom Mark gdhendës se 818 00:46:31,517 --> 00:46:33,100 shkruan nga shenjat metronom në një rezultat. 819 00:46:33,100 --> 00:46:36,410 Dhe të gjitha këto të përshtaten mjaft edhe në hierarkinë. 820 00:46:36,410 --> 00:46:39,500 Dhe kjo është shumë, shumë, shumë përshtatshëm, të cilat ju duhet 821 00:46:39,500 --> 00:46:42,880 në qoftë se ju doni të merrni gjëra të tilla si se. 822 00:46:42,880 --> 00:46:45,730 >> Kështu që të gjitha kontekstet kanë një shumë e atributeve të ndryshme 823 00:46:45,730 --> 00:46:52,410 që ju mund të modifikoj për çdo gjë nga ndarje të ndryshme font 824 00:46:52,410 --> 00:46:54,942 Zgjedhja për të madhësive të gjërave. 825 00:46:54,942 --> 00:46:56,900 Nëse ju doni të bëni edhe gjëra më të komplikuara, 826 00:46:56,900 --> 00:46:59,210 ka një gjuhë e shkruar ngulitur. 827 00:46:59,210 --> 00:47:01,820 Ata përdorin skemë, e cila është dialekt i LISP. 828 00:47:01,820 --> 00:47:04,960 Këto ndoshta nuk thotë asgjë për ju. 829 00:47:04,960 --> 00:47:06,900 Por në thelb, një skemë tjetër funksional 830 00:47:06,900 --> 00:47:09,500 gjuhë programimi, pak a shumë. 831 00:47:09,500 --> 00:47:10,800 >> STEPHEN KREWSON: The kravatë-në. 832 00:47:10,800 --> 00:47:12,690 >> CONNOR HARRIS: Po. 833 00:47:12,690 --> 00:47:15,390 Kjo është një kravatë-në të mirë, unë mendoj. 834 00:47:15,390 --> 00:47:20,150 Dhe është përdorur si një gjuhë e mësimdhënies, në fakt, poshtë Mass Ave. Në MIT. 835 00:47:20,150 --> 00:47:26,590 Dhe kjo është shumë i dobishëm për LillyPond për arsye të ndryshme teknike. 836 00:47:26,590 --> 00:47:30,317 >> Dhe kështu që në qoftë se ju doni të bëni të thjeshtë tweaks varen nga conditionals, 837 00:47:30,317 --> 00:47:32,900 për example-- ka të caktuar gjendja e një rezultat që është plotësuar, 838 00:47:32,900 --> 00:47:36,495 të bëjë ndryshime në Layout ose whatnot-- atëherë 839 00:47:36,495 --> 00:47:37,620 këto objekte janë atje. 840 00:47:37,620 --> 00:47:38,667 Ata janë të komplikuara. 841 00:47:38,667 --> 00:47:40,250 Kështu që këtu është një mostër shumë e thjeshtë kod. 842 00:47:40,250 --> 00:47:43,810 Kjo është pesë linjat. 843 00:47:43,810 --> 00:47:46,120 Në thelb, unë jam duke përcaktuar dy shtabeve. 844 00:47:46,120 --> 00:47:46,904 Është në 3/4. 845 00:47:46,904 --> 00:47:48,695 Stafi i parë ka një bashkangjitur Mark tempo, 846 00:47:48,695 --> 00:47:51,110 por kjo është në të vërtetë ndodh për të shkuar në për të gjithë rezultatin, 847 00:47:51,110 --> 00:47:54,960 sepse shenjat tempo janë në nivelin rezultatin. 848 00:47:54,960 --> 00:47:59,044 Shenja metronom gdhendës është e bashkangjitur për të shënuar kontekstin. 849 00:47:59,044 --> 00:48:01,460 Nuk janë çelësat e ndryshme, për shkak të [e padëgjueshme] gdhendës 850 00:48:01,460 --> 00:48:02,710 është e bashkangjitur shtabet. 851 00:48:02,710 --> 00:48:04,441 Ju në fakt mund të bëni është. 852 00:48:04,441 --> 00:48:06,190 Mostra kam shkruar është në fakt në C të mëdha, 853 00:48:06,190 --> 00:48:07,990 por kjo është vetëm për të demonstrojnë ju mund të keni 854 00:48:07,990 --> 00:48:09,570 çelësat e ndryshme në shtabeve të ndryshme. 855 00:48:09,570 --> 00:48:15,710 Dhe sintaksa themelor është që ju shkruani shënim emrat me E, F, G, çfarëdo. 856 00:48:15,710 --> 00:48:18,910 Nëse ju doni të bëni accidentals, ju prapashtesë është apo ES. 857 00:48:18,910 --> 00:48:22,640 Kjo është nga holandisht konventat Muzikore. 858 00:48:22,640 --> 00:48:28,290 >> Dhe për të bërë hapa oktavë, ju duhet të përdorni këto shënoni Marks, presje apo apostrof. 859 00:48:28,290 --> 00:48:30,580 Relative thjesht do të thotë çdo gjë që ju të keni një shënim, 860 00:48:30,580 --> 00:48:34,080 kjo automatikisht do të plaec në oktavë më të afërt me atë të mëparshme. 861 00:48:34,080 --> 00:48:37,624 Dhe në qoftë se ju doni të hidhen më shumë se një fifth-- thonë se një e pesta ose more-- 862 00:48:37,624 --> 00:48:39,165 atëherë ju duhet të përdorni [e padëgjueshme]. 863 00:48:39,165 --> 00:48:42,580 Por përndryshe, ju nuk keni për të specifikojë oktavë e çdo notë të vetme. 864 00:48:42,580 --> 00:48:46,130 >> Dhe relative C, kryeministër, dhe C, ju vetëm të specifikojë mesme C 865 00:48:46,130 --> 00:48:48,630 dhe baza C, vë në dukje veçanërisht para. 866 00:48:48,630 --> 00:48:55,020 Atëherë ju keni këto shtabet që organizojnë këto dy zëra ose mostra të muzikës, 867 00:48:55,020 --> 00:48:56,730 dhe ju keni një rezultat. 868 00:48:56,730 --> 00:48:58,440 Dhe kjo duket si ky. 869 00:48:58,440 --> 00:49:01,780 870 00:49:01,780 --> 00:49:05,380 >> Nëse ju doni të merrni kohë për të Kopjoni këtë mostër të LillyPond 871 00:49:05,380 --> 00:49:07,530 Kodi mbi mëparshme rreshqet këtu, dhe ju 872 00:49:07,530 --> 00:49:09,030 mund të shkruani atë për LillyPond veten. 873 00:49:09,030 --> 00:49:11,280 Unë e di se ne kemi marrë diçka që duket shumë si kjo. 874 00:49:11,280 --> 00:49:17,236 875 00:49:17,236 --> 00:49:19,610 Pra, ka një tjetër teknologji quajtur XML Muzikë mirëmbahet 876 00:49:19,610 --> 00:49:22,030 nga persona krejtësisht të ndryshme. 877 00:49:22,030 --> 00:49:28,150 XML është një dhënat tekstuale structure-- unë nuk duhet të thonë se të dhënat e structure-- them 878 00:49:28,150 --> 00:49:29,580 metaforë Harta lloj. 879 00:49:29,580 --> 00:49:33,800 Dhe kjo është projektuar për të mbajtur të dhënave hierarkike shumë mirë. 880 00:49:33,800 --> 00:49:37,050 HTML, për shembull, është një lloj i XML. 881 00:49:37,050 --> 00:49:41,090 Dhe ju mund të thoni XML për shkak se ata kishte të gjitha kllapa kënd dhe kënd 882 00:49:41,090 --> 00:49:44,700 shënon kllapa Slash që fushat shfaqje të dhënave. 883 00:49:44,700 --> 00:49:47,390 >> Unë nuk kam një kod shembull nga Music XML. 884 00:49:47,390 --> 00:49:50,450 Ju mund të gjeni vetë. 885 00:49:50,450 --> 00:49:53,735 Në thelb, arsyeja që ju mund të dëshironi për t'u përdorur si XML fazën e ndërmjetme 886 00:49:53,735 --> 00:49:55,980 është, para së gjithash, kjo është një format shkëmbim 887 00:49:55,980 --> 00:50:02,301 për thelb every-- unë nuk duhet të them çdo, por një shumë e rezultatit të ndryshme 888 00:50:02,301 --> 00:50:02,800 shkrimtarë. 889 00:50:02,800 --> 00:50:04,966 Pra, nëse ju shkruani në Muzikë XML, jo vetëm që mund LillyPond 890 00:50:04,966 --> 00:50:08,080 lexojnë atë me ndihmën e këtij auxilary program të quajtur Muzikë XML për LY, 891 00:50:08,080 --> 00:50:11,360 por edhe Finale mund të lexoni ajo, Sibelius mund ta lexoni atë. 892 00:50:11,360 --> 00:50:14,770 Varësisht se si objektin tuaj të brendshme hierarki punon për përfaqësimin muzikë, 893 00:50:14,770 --> 00:50:18,820 ajo mund të jetë më e lehtë për të shkruar jashtë të Muzikës XML sesa të LillyPond 894 00:50:18,820 --> 00:50:22,410 dhe të mbështeten vetëm në Music XML të LY për të bërë konvertimin. 895 00:50:22,410 --> 00:50:24,282 >> Unë nuk mendoj se [e padëgjueshme] ka Muzikë XML. 896 00:50:24,282 --> 00:50:25,490 STEPHEN KREWSON: Kjo nuk ka. 897 00:50:25,490 --> 00:50:26,340 Dikush është duke punuar në të, edhe pse. 898 00:50:26,340 --> 00:50:27,090 >> CONNOR HARRIS: OK. 899 00:50:27,090 --> 00:50:31,040 Euterpea nuk ka një Muzikë XML funksion ende prodhimit. 900 00:50:31,040 --> 00:50:35,340 Nëse doni një ide përfundimtare të projektit, ndoshta merrni në kontakt me një vajzë 901 00:50:35,340 --> 00:50:38,620 se Stefani e di, dhe ata mund të përdorin ndihmën tuaj. 902 00:50:38,620 --> 00:50:40,992 >> STEPHEN KREWSON: Unë do të duan atë. 903 00:50:40,992 --> 00:50:43,450 CONNOR HARRIS: Gjithashtu, në thelb, çdo gjuhë programimi 904 00:50:43,450 --> 00:50:46,610 kjo është vlerë kripë e saj tashmë ka një bibliotekë XML, 905 00:50:46,610 --> 00:50:51,030 kështu që ju mund të brenda vendit të kthyer të gjitha e muzikës tuaj në një objekt 906 00:50:51,030 --> 00:50:54,120 se biblioteka XML mund të shkruajnë se do të kërkojë më pak 907 00:50:54,120 --> 00:50:57,470 ndryshimet në strukturën tuaj të brendshme për çfarëdo muzikë të objekteve 908 00:50:57,470 --> 00:51:00,310 dua të shkruaj se shkruar atë direkt në LillyPond do. 909 00:51:00,310 --> 00:51:04,380 Pastaj vetëm të shtypura it out me XML me bibliotekat XML në gjuhën tuaj, 910 00:51:04,380 --> 00:51:07,260 i cili do të garantojë se kjo është sintaksore korrekte dhe çdo gjë, 911 00:51:07,260 --> 00:51:08,720 dhe pastaj kthyer atë në LillyPond. 912 00:51:08,720 --> 00:51:11,060 Pra, teknologji ju mund të dëshironi të shikoni në qoftë se ju jeni duke bërë diçka 913 00:51:11,060 --> 00:51:11,650 si kjo. 914 00:51:11,650 --> 00:51:14,490 915 00:51:14,490 --> 00:51:16,370 >> [Padëgjueshme], një tjetër teknologji auxilarry. 916 00:51:16,370 --> 00:51:21,700 Kjo është në thelb Tech Punon ose Tech Studio për LillyPond. 917 00:51:21,700 --> 00:51:25,380 Pra, ajo ofron ndihmë me Sintaksa, me templates 918 00:51:25,380 --> 00:51:28,770 për të përbashkët të ndryshme kombinime të instrumenteve. 919 00:51:28,770 --> 00:51:32,780 Kjo i lejon ekran të ndarë shikimin kështu ju mund të keni kodin tuaj në një dritare 920 00:51:32,780 --> 00:51:37,350 dhe PDF në një tjetër dritare dhe klikoni në vende në PDF 921 00:51:37,350 --> 00:51:40,650 të hidhen në përkatës spote në kodin tuaj burim. 922 00:51:40,650 --> 00:51:45,330 Kjo është më e dobishme në qoftë se ju jeni në të vërtetë shkrim LillyPond fotografi veten 923 00:51:45,330 --> 00:51:47,400 se në qoftë se ju jeni duke gjeneruar ata programuar. 924 00:51:47,400 --> 00:51:51,230 Por përsëri, kjo është diçka të dobishme që të ketë. 925 00:51:51,230 --> 00:51:51,970 >> I madh. 926 00:51:51,970 --> 00:51:55,860 Një tjetër resources-- unë vetëm do të kalojnë nëpër këtë shumë shpejt. 927 00:51:55,860 --> 00:52:01,270 LillyPond Manualet LillyPond ka Dokumentacioni i shkëlqyer në faqen e saj. 928 00:52:01,270 --> 00:52:02,270 Ata kanë një tutorial. 929 00:52:02,270 --> 00:52:03,478 Ata kanë një referencë sintaksë. 930 00:52:03,478 --> 00:52:07,010 Ata kanë qindra e copra për gjëra të ndryshme të vogla 931 00:52:07,010 --> 00:52:09,930 yo mund të kenë nevojë të bëni për të treguar aftësive të ndryshme. 932 00:52:09,930 --> 00:52:12,250 Nëse ju doni të përdorni gjuha e shkruar 933 00:52:12,250 --> 00:52:14,740 ose të bëjë më të gjera Përshtatje, atëherë nuk ka 934 00:52:14,740 --> 00:52:16,730 internals referencë në atë URL. 935 00:52:16,730 --> 00:52:21,950 Nëse ju doni të përdorni Muzikë XML, ka se URL, musicxml.com/tutorial. 936 00:52:21,950 --> 00:52:27,960 >> Dhe pastaj në qoftë se ju duhet të mësoni skemë sepse ju në fakt doni të përdorni 937 00:52:27,960 --> 00:52:30,960 objektet scripting në LillyPond, atëherë ka një [e padëgjueshme] quajtur 938 00:52:30,960 --> 00:52:32,918 Interpretimi Strukturuar e programeve kompjuterike, 939 00:52:32,918 --> 00:52:35,820 e cila nuk është vetëm e dytë më i madh teksti CS ndonjëherë written-- 940 00:52:35,820 --> 00:52:39,770 gjeni më pas në qoftë se ju doni të dini ajo që unë mendoj se më i madhi një is-- 941 00:52:39,770 --> 00:52:43,580 por kjo është edhe një shumë të mirë hyrje në gjuhën e duhur. 942 00:52:43,580 --> 00:52:46,630 Ju nuk do të duhet më shumë se Disa seksione të parë. 943 00:52:46,630 --> 00:52:47,827 >> Dhe kjo është ajo. 944 00:52:47,827 --> 00:52:48,410 Ndonje pyetje? 945 00:52:48,410 --> 00:52:54,068 946 00:52:54,068 --> 00:52:57,972 >> STUDENT: Ku mund ta shkarkoni juaj gjeneruar Frere Jacques 947 00:52:57,972 --> 00:53:01,050 kështu që unë mund të vënë atë në iPod tim? 948 00:53:01,050 --> 00:53:07,574 >> STEPHEN KREWSON: E pra, ju mund të shkruani diku larg në një skedar wav në Euterpea. 949 00:53:07,574 --> 00:53:08,490 Dhe ju keni kodin. 950 00:53:08,490 --> 00:53:10,000 Është në Github. 951 00:53:10,000 --> 00:53:15,590 Bëni variacione tuaj të Frere Jacques nga CS50 mendjes koshere. 952 00:53:15,590 --> 00:53:17,095 Ajo do të jetë i madh. 953 00:53:17,095 --> 00:53:18,220 CONNOR HARRIS: Çdokush tjetër? 954 00:53:18,220 --> 00:53:20,261 STEPHEN KREWSON: Ne kemi nevojë për një bas daulle të mirë, too. 955 00:53:20,261 --> 00:53:21,935 Është me të vërtetë e keqe. 956 00:53:21,935 --> 00:53:26,565 >> STUDENT: Euterpea ka jo vetëm pala përbërja, por signal-- 957 00:53:26,565 --> 00:53:27,440 STEPHEN KREWSON: Po. 958 00:53:27,440 --> 00:53:30,100 Në fakt, puna unë bëri në Euterpea kur unë 959 00:53:30,100 --> 00:53:33,450 mori this-- ka një diplomuar kurs në Yale se 960 00:53:33,450 --> 00:53:35,900 përdor it-- ishte në sintezë të shëndoshë. 961 00:53:35,900 --> 00:53:39,810 Pra, ka një të vërtetë mënyrë e mirë për përdorimin e shigjeta 962 00:53:39,810 --> 00:53:46,150 dhe disa prej simbol pamë të kompozuar së bashku funksionet sinjal. 963 00:53:46,150 --> 00:53:50,610 Në veçanti, bas për më prej tyre është vetëm një valë sine thjeshtë. 964 00:53:50,610 --> 00:53:54,240 Por nëse ju filloni kompozimin ato në mënyra të pazakontë programore, 965 00:53:54,240 --> 00:54:00,010 ju mund të merrni tingëllojë si i çmendur Efektet, si kaskadat pazakontë. 966 00:54:00,010 --> 00:54:04,640 Ju mund të krijoni shumë prej rëre tingëllon me shumë ulje. 967 00:54:04,640 --> 00:54:07,730 >> Kam bërë një projekt në grimcuar sinteza, i cili është 968 00:54:07,730 --> 00:54:12,290 diku në mes FM dhe marrjen e mostrave. 969 00:54:12,290 --> 00:54:15,230 Ju merrni shumë të vogla, mostrat pak, dhe pastaj 970 00:54:15,230 --> 00:54:20,440 kombinuar ato me një lloj të modulator dhe për të ndërtuar një tingull më të pasur. 971 00:54:20,440 --> 00:54:24,900 Ne gjithashtu bëri modelimin fizik, kështu që duke u përpjekur të mendojnë për fizikës 972 00:54:24,900 --> 00:54:29,410 dhe psychoacoustics e diçka si borisë, dhe të menduarit në lidhje me mënyrën 973 00:54:29,410 --> 00:54:32,320 shëndoshë është kërcim off zilja e borisë 974 00:54:32,320 --> 00:54:35,200 dhe akustikë e dhomë dhe modelimit 975 00:54:35,200 --> 00:54:40,195 që me oscillators themelore. 976 00:54:40,195 --> 00:54:47,690 977 00:54:47,690 --> 00:54:48,940 CONNOR HARRIS: Thanks so much. 978 00:54:48,940 --> 00:54:50,140 Faleminderit për të ardhur. 979 00:54:50,140 --> 00:54:52,400 Dhe unë jam gjithmonë të gatshëm për marrë pyetje nga email-- 980 00:54:52,400 --> 00:54:55,020 connorharris@college.harvard.edu. 981 00:54:55,020 --> 00:54:57,020 >> STEPHEN KREWSON: Po. stephen.krewson@yale.edu. 982 00:54:57,020 --> 00:54:58,810 983 00:54:58,810 --> 00:55:00,360 Ftohtë. 984 00:55:00,360 --> 00:55:01,667