קאַנער האַרריס: הי. איך בין קאַנער האַרריס. איך בין אַ קס50 CA אין האַרוואַרד. סטיווען קרעווסאָן: איך בין סטיווען קרעווסאָן. איך בין אַ טף פֿאַר קס50 ביי יאַלע. קאַנער האַרריס: און מיר רע געגאנגען צו רעדן וועגן עטלעכע טעקנאַלאַדזשיז אַז איר זאל ווילן צו נוצן אויב איר ניטאָ אינטערעסירט אין טאן אַ לעצט פּרויעקט אָדער טאַקע עפּעס מיט מוזיק. מיר רע געגאנגען צו זייַן פאָקוסינג אויף ערשטער אַ פּראָגראַממינג שפּראַך גערופֿן Haskell. עס ס אַ Functional שפּראַך, אַזוי די פּעראַדיים איז זייער אַנדערש פון C אָדער PHP אָדער אנדערע ימפּעראַטיוו שפּראַכן אַז איר ווע געניצט שוין, און ספּעציעל אויף אַ ביבליאָטעק געשריבן אין Haskell גערופֿן עוטערפּעאַ, וואָס קענען העלפֿן מענטשן מיט שרייבן מוזיק פונקטיאָנאַללי, בייסיקלי. און סטיווען וועט גיין איר דורך אַ גרויס בייַשפּיל פון וואָס. נאָך דעם, איך וועט באַקענען איר צו עפּעס גערופֿן לילליפּאָנד, וואָס איז אַ טעכנאָלאָגיע פֿאַר טייפּסעטינג מוזיק. עס ס סאָרט פון ווי לייטעקס פֿאַר מוזיק אויב קיין פון איר האָבן געניצט לייטעקס פֿאַר מאַט קלאסן אָדער אנדערע פּ שטעלן קלאסן אָדער וואָס האָבן איר. און אַזוי איך וועט געבן איר, ווידער, עטלעכע פּשוט יגזאַמפּאַלז פון אַז און פונט איר אין דער אַלגעמיין ריכטונג פון עטלעכע בעסער רעסורסן. סטיווען קרעווסאָן: אין דערצו, מיר געדאַנק עס וואָלט זיין קיל צו שטעלן אַרויף אַ קליין ביסל פון הינץ צו אַ רערנ צווישן עוטערפּעאַ-דזשענערייטאַד מידי טעקעס אין לילליפּאָנד, אַזוי מיר צושטעלן עטלעכע לימעד אויף סקריפּס צו טאָן אַז וואָס זענען צוגעשטעלט מיט לילליפּאָנד נאָר צו האַלטן עס עפענען מקור און באַקומען אַ רערנ געגאנגען. קאַנער האַרריס: ווידער, מיר זאָל ונטערשטרייַכן, די צוויי טעקנאַלאַדזשיז, איר דו זאלסט נישט האָבן צו נוצן זיי צוזאַמען. זיי ניטאָ ניט דיזיינד צו אַרבעטן צוזאַמען, כאָטש זיי טאָן זייער נייסלי. סטיווען קרעווסאָן: רעכט. און טאָוטאַלי פּאָטער. קאַנער האַרריס: אזוי אַקקנאָוולעדגמענץ, נאָר לייענען אַז. סטיווען קרעווסאָן: דולי באמערקט. דאַנק צו די folks. דעם איך וועט זאַמענ זיך אויף נאָר פֿאַר אַ מאָמענט. די ינסטאַלירונג פּראָצעס איז אַ קליין ביסל טריקי. מיר האָבן אַ לייענען מיר אויף די גיטהוב אַז איר קענען נעמען אַ קוק אין. נאָר email מיר אויב איר האָבן קיין שאלות. אָבער מיר וועט לויפן דעם אונטער די האַשאָרע אַז דאָס איז ארבעטן פֿאַר יעדער יינער. קאַנער האַרריס: און אויב איר קענען ניט באַקומען לילליפּאָנד צו אַרבעטן, קיין גרויס האַנדלען. עס ס קיין לעבן זאַמלונג אַז וועט זיין ינוואַלווד, לפּחות אויף מיין סוף. סטיווען קרעווסאָן: Haskell און לילליפּאָנד זאָל ביידע האָבן ינסטאָלערז. עוטערפּעאַ איז דאַונלאָודיד ווי אַ פּעקל, אַזוי אויף און אַזוי אַרויס. אַזוי מיר ניטאָ גערעדט וועגן קאָמפּיוטער מוזיק. און דאָס איז נאָר אַ זייער 50,000-פֿיס מיינונג. עס ס אַ ביסל אַנדערש אַספּעקץ פון עס. און דעם איז פּראָסט און איז געגאנגען צו דיק עטלעכע דעטאַל. אבער מיר קען טראַכטן פון עפּעס ווי אַלגאָריטהמיק זאַץ, ניצן אַלגערידאַמז, ניצן קאָד, צו דזשענערייט עטלעכע טיפּ אָפ-- אפֿשר אַ זיך-ענלעך סיקוואַנס פון הערות, אָדער אפֿשר הערות אונטער עטלעכע קאַנסטריינט. און דעמאָלט יענע קען זיין געטאן אָדער ינטערפּראַטאַד מיט אַנאַלאָג ינסטראַמאַנץ אָדער עפּעס ווי אַז. אבער דער זאַץ איז געווען געטאן אַלגאָריטהמיקאַללי. אבער פון קורס, אפֿשר די געגנט פון קאָמפּיוטער מוזיק אָדער דיגיטאַל מוזיק מיר ניטאָ מער באַקאַנט מיט איז דיגיטאַל סאָונד סינטהעסיס אָדער דיגיטאַל מוסטערונג און דיגיטאַל רעקאָרדינג. א פּלאַץ פון דיגיטאַל ינסטראַמאַנץ זענען געטאן דורך דיגיטאַל מוסטערונג. אין פאַקט, מיר וועט זייַן ניצן איינער פון די אין די פאָרעם פון אַ געזונט שריפֿט ביבליאָטעק שפּעטער. אבער עס ס אויך עפּעס גערופֿן דיגיטאַל סינטעז אַז געקומען אויס פון די שפּעט '70 ס און אין די '80s מיט יאַמאַהאַ און יוחנן טשאָוונינג אין סטאַנפֿאָרד טאן FM סינטעז אָדער אָפטקייַט מאַדזשאַליישאַן סינטעז, ווו איר האט אַ טרעגער סיגנאַל און אַ מאָדולאַטינג סיגנאַל ביידע אין די אַודיאָ ספּעקטרום. אבער וואָס מיר ניטאָ זיך קאָנצענטרירט אויף הייַנט איז עפּעס גערופֿן מידי, און פון קורס, אַלגאָריטהמיק זאַץ. מיר ניטאָ ניט געגאנגען צו מאַכן ינסטראַמאַנץ, אָבער מיר ניטאָ אַנשטאָט געגאנגען צו מאַכן עטלעכע מוזיק, און דעמאָלט אַז וועט באַקומען ינטערפּראַטאַד דורך עטלעכע ינסטראַמאַנץ אַז זענען קאָנפאָרמאַנט צו די אַלגעמיין מידי נאָרמאַל. אזוי וואָס ס מידי? איך בין נישט געגאנגען צו באַקומען אויך טיף אין אים, אָבער מידי איז דאַטן אַריבערפירן פּראָטאָקאָל. עס ס אַ מין פון אַ פירן אַריבער פאַרשידענע קאָמפּאַניעס און ינדאַסטריז פֿאַר אָרגאַנייזינג סאָונדס אָדער פּאַטשאַז. אַזוי מיר וועט זען אַז עס ס אַ מידי נאָרמאַל פֿאַר אַלע די פאַרשידענע שלאָג סאָונדס און מידי רעקאַמאַנדיישאַנז פֿאַר אַלע די פאַרשידענע טייפּס פון סינטה אָדער אַנדערש טייפּס פון אַלע די קיילע גרופּעס אין אַ אָרקעסטער, זאָגן. איר 'רע מיסטאָמע באַקאַנט מיט 0 דורך 127 מידי אַרטיקלען. אַ מידי סיגנאַל איז טיפּיקלי איינער ביסל ינדאַקייטינג צי עס ס אַ דאַטע אָדער אַ סטאַטוס פּאַקאַט, און דעמאָלט דאָרט ס זיבן ביטן פון אַ סיגנאַל. און די קענען קאָנטראָלירן אַלץ פון באַנד צו דער קאַמף אָדער דרוק אויף אַ באַזונדער שליסל אויב איר ניטאָ Performing מיט אַ מידי קאָנטראָללער ווי געזונט ווי, פון קורס, הערות. און פון קורס, מידי האט שוין גאָר נוצלעך, ווייַל עס ס אַ וועג צו דראָט צוזאַמען אָדער מאַרגעריטקע קייט אַ בינטל פון מידי ייַזנוואַרג דיווייסאַז. איך האב זיבן אָדער אַכט צוריק אין מיין הויז. עס געץ טאַקע קאָמפּליצירט, אָבער עס ס טאַקע שטאַרק. און עס ס טאַקע אַלט. עס ס פון די פרי '80s, און עס ס טאַקע פייַן און קליין. קאַנער האַרריס: יאָ. כל דער קלאַסיש נינטענדאָו וידאו גאַמעס וואָלט מיסטאָמע האָבן מידי טעקעס פֿאַר מוזיק, פֿאַר משל. סטיווען קרעווסאָן: דאָ ס אַ לעמאָשל פון גענעראַל מידי, ווייַזונג מידי ווי אַ מין פון גענעראַל פּראָטאָקאָל. און איך טראַכטן מיר קענען טראַכטן פון די חילוק צווישן די באַשרייַבונג אַז עס זאָל זיין עפּעס ווי די קיילע סאָונדס און די פאַקטיש מעקייַעם פון די ינסטראַמאַנץ סאָונדס אין אַ געזונט שריפֿט אָדער אַ באַזונדער מידי סינטאַסייזער ווי ווייל די חילוק צווישן אפֿשר אַ טיפּעפאַסע-- וואָס זאגט, אין אַלגעמיין, דעם איז דער פּלאַן פון דעם באַזונדער וועג צו פאָרשטעלן טשאַראַקטערס-- און אַ באַזונדער שריפֿט וואָס האט אַ ספּעציפיש גרייס און טימברע, און עס ס מעקייַעם פון טהע-- קאַנער האַרריס: אפֿשר אַ בעסער פאַרגלייַך וואָלט זיין די אוניקאָד נאָרמאַל סייַס-- עס גיט אַ נומער צו יעדער כאַראַקטער, און טאַקע יעדער שפּראַך אין דער וועלט, אָדער אַ וואַסט שטעלן פון סקריפּס פון שפּראַך אין דער וועלט, און דעריבער די זענען רענדערד אין עפּעס גראַפיקאַל דורך פאַרשידן שריפֿט פּאַקאַדזשאַז. און דאָך, איר קענען טראַכטן פון מידי ווי די אוניקאָד פון געזונט. און עס ס נאָר אַ רשימה אָפ-- אַ גרויס טייַך געשעענישן און ינסטראַמאַנץ און וואַטנאַט, און איר האָבן צו האָבן אַ באַזונדער פּראָגראַם, ווי אַ טיפּעפאַסע, צו ופפירן אַז אין עפּעס אַז ס דייַטלעך. סטיווען קרעווסאָן: אזוי וואָס Haskell? Haskell איז אַ Functional פּראָגראַממינג שפּראַך, זייער אַוואַנסירטע, זייער אַנדערש פון C, זייער אַנדערש פֿון PHP. און מיר רע געגאנגען צו זען אַז עס ס אַ יז פון פונקציאָנירן זאַץ אין Haskell וואָס וועט לאָזן אונדז צו ווינטל דורך קאַמפּאָוזינג אָדער טייפּינג אַרויף, טראַנסקריבינג, עפּעס ווי פרערע דזשאַק, דעם פּשוט ליד, וואס האט אַ פּלאַץ פון טיילן אין עס אַז זענען זיך-ענלעך אָדער ריפּיטינג. אזוי דעם וועט זיין עטלעכע פון די מאָוטאַוויישאַן פֿאַר וואָס מיר 'רע ניצן Haskell, אין וואָס פֿעיִקייטן זענען ערשטער קלאַס בירגערס. און איך געוואלט צו פאַרברייטערן דעם אַ קליין ביסל. עס ס אַ קליין ביסל גרינג צו נאָטאַטע פרערע דזשאַק אין Haskell. אבער וואָס אויב מיר געוואלט צו לייגן אַ פּויק טייל צו עס? וואָס אויב מיר געוואלט צו פּרובירן צו מאַכן עפּעס ווי אַ ראָלאַנד 808 אָדער 909 פּויק מאַשין ווו איר האָבן וועגן 16 אַנדערש טריט? וסואַללי די זענען געדאַנק פון ווי 16th הערות. און איר קענען קאָנטראָלירן די גלאבאלע טעמפּאָ, און איר קענען קלייַבן אויס אַ בינטל פון פאַרשידענע שלאָג פּאַרץ פון באַס פּויק, אַ פּאַטשן, אַנדערש סנאַרעס, עפענען און פֿאַרמאַכט הויך האַץ אויף די סאָרט פון טשאַנאַלז, און דעמאָלט איר קענען עק אָדער סטרויערן זייער באַנד. און מיר וועט זען אַ פייַן וועג אין Haskell פון רעפּריזענטינג דעם שריט סעקווענסער מיט אַלע די פאַרשידן קיל זאכן אין Haskell מיר קענען טאָן מיט דזשענערייטינג רשימות און פֿילטרירונג איבער רשימות, מאַפּינג איבער רשימות, מאַפּינג פֿעיִקייטן איבער רשימות. און אַ שנעל אַנטשולדיקונג. דאס איז אַ זייער קערסערי און אָוווערלי שנעל סקיצע פון עטלעכע פון ​​די אַספּעקץ פון Haskell און עוטערפּעאַ, וואָס איז אַ פעלד-ספּעציפיש עמבעדיד שפּראַך געשריבן אין Haskell פֿאַר מוזיקאַליש טייפּס. אַזוי ביטע טאָן טשעק אויס די קאָד אָנליין. פייַער אַרויף גהסי, וואָס איז די גלאַסקאָו Haskell קאַמפּיילער ינטערפּרעטער. און איך וועט זייַן טאן עטלעכע פון דעם אין אַ ביסל אַזוי איר קענען זען ווי עס ס געטאן. און דעם אַלאַוז איר צו מאַסע אין מיט טהע-- די סינטאַקס איז צווייפּינטל און דעמאָלט די באַפֿעל. איר קענען לאָדן אין טעקעס. איר קענען נוצן בלעטער אויף די טעקעס צו זען אַלע די פֿעיִקייטן אַז עקסיסטירן אין אַ באַזונדער מאָדולע. און דעמאָלט ווי מיר וועט זען, טייפּס און דרוקן קלאסן זענען אַזוי וויכטיק אין Haskell, אַזוי איר קענען שטענדיק טשעקק-- ספּעציעל אויב איר 'רע ארבעטן אין אַ נייַ דסקל ווי דעם, וואָס איז אַ מוזיק טיפּ? איך וויסן וועגן דעם וועג נומעריק טייפּס אַרבעט אין Haskell, אָבער איך טאָן ניט וויסן פיל וועגן מוזיק. אבער איר קענען ויספאָרשן די וועג זיי ניטאָ Defined דורך ניצן דעם ה אָדער טיפּ באַפֿעל און דעמאָלט פאַך אין אַ באַזונדער פֿונקציע אָדער אַ דאַטע כייפעץ. קאַנער האַרריס: יאָ. אויב איר געדאַנק C און קלאַנג איז האַרדאַסס וועגן טייפּס, איר האָבן קיין געדאַנק וועגן Haskell. די גוט זאַך וועגן Haskell איז אַז אויב איר קענען באַקומען אייער קאָד צו צונויפנעמען און אויב Haskell טיפּ טשעקס, עס ס מיסטאָמע רעכט, ווייַל דעם טיפּ סיסטעם איז אַזוי שטרענג. סטיווען קרעווסאָן: יאָ. אַזוי איך נאָר ווילן צו גיין טהראָוגה-- און ווידער, דעם איז ניט טאן עס דזשוסטיסע-- אַ ביסל פון די פֿעיִקייטן פון Haskell אַז, לפּחות צו זייַן קרעאַטאָרס-- און עס איז געווען Created אין די שפּעט 1980 ס דורך אַ בינטל פון מענטשן, אַ קאמיטעט פון וועגן 20 פּעאָפּלע-- געדאַנק זענען וויכטיק. און דער ערשטער זאַך זיי ליסטעד אין אַ פּאַפּיר וואָס דיסקרייבד די אָנהייב פון Haskell איבער דער ערשטער 20 יאר אָדער אַזוי איז אַז עס איז געווען פויל. אַזוי וואָס טוט דעם הייסן? נו, עס מיטל ווען מיר האָבן עטלעכע מין פון אויסדרוק, מיר דאַרפֿן צו אָפּשאַצן עס. און Haskell טוט דעם אין אַ רוף דורך דאַרפֿן וועג אָדער אַ ניט-שטרענג וועג. אַז איז, אויב מיר האָבן אַ בינטל פון קאַמפּאָונאַנץ פון אונדזער אויסדרוק, מיר פּרובירן צו פאַרהאַלטן די עוואַלואַטיאָן פון יענע סובקאָמפּאָנענץ ביז די אַבסאָלוט לעצטע מינוטע-- וואָס איז ביז מיר אַקטשאַוואַלי דאַרפֿן זיי. אזוי דעם מעאַנס-- וואָס איז טאַקע קיל, ספּעציעל אויב מיר ניטאָ טראכטן וועגן די אַבסטראַקציע פון אַ מוזיקאַליש שריט סעקווענסער. איר אומקערן עס אויף, און איר אָנהייב פליסנדיק אַ שריט סעקווענסע-- אויב איר אלץ געארבעט מיט אַ פּויק מאַטשינע-- און עס פּונקט גייט אויף אייביק. אַזוי עס וואָלט זיין טאַקע פייַן אויב מיר קען עמיאַלייט אַז אין Haskell. און מיר קענען טאָן עס מיט אַנלימאַטאַד וואַלועס, אין באַזונדער Infinite רשימות. עס ס זייער גרינג צו דרוקן אַ Infinite רשימה אין Haskell. איר קען נאָר נוצן די סינטאַקס אַראָפּ דאָ, ווו איר זען 1 דורך 3, אַראָפּנעמען די 3 1 פּונקט פּונקט, און אַז איז אַ אַנלימאַטאַד רשימה פון אַלע די נאַטירלעך נומערן יקסטענדינג אויף ווי ווייַט ווי איר קענען ימאַדזשאַן. איך ווילן צו באַקענען אַ באַגריף פון פאָלדס רעכט אַוועק. און ווידער, די ציל פון דעם סעמינאַר איז ניט צו לערנען וועגן פאָלדס אין Haskell אָדער העכער סדר פֿעיִקייטן. אָבער איך נאָר ווילן צו באַקענען עס צו געבן אַן פּינטלעך געפיל פון ווי טשודנע Haskell איז און ווי שטאַרק עס איז. און אין באַזונדער, מיר רע געגאנגען צו בע-- ווען מיר טאָן אונדזער פאַרשידענע פּויק טיילן, מיר רע געגאנגען צו זייַן מאַניפּיאַלייטינג רשימות פון נומערן, פאָלדינג זיי אַנטו יעדער אנדערער. און צו טאָן וואָס, מיר וועט זיין ניצן מאַפּס און פאָלדס. עס ס אַ רעכט אַססאָסיאַטיווע קנייטש, וואָס איז דאָס איינער רעכט הערע-- 1 מינוס די קוואַנטיטי, 2 מינוס די קוואַנטיטי, 3 מינוס 0. און די סינטאַקס פֿאַר אַ קנייטש, איר געבן אַ קנייטש אַ באַזע ווערט און דעמאָלט אַן אָפּעראַטיאָנ-- אין דעם פאַל, דערצו אָדער כיסער. איך ווע געוויזן ביידע קאַסעס. און דעמאָלט דאָרט ס אַ אַקיומיאַלייטער אַז אַקיומיאַלייץ איבער די גאנצע רשימה, אַפּלייינג אַז אָפּעראַטאָר פּלוס אָדער מינוס, און דעמאָלט אַקיומיאַלייטינג עס. אזוי דעם וועט זיין טהע-- אויב עס איז געווען געהייסן מיט פאַרלייגן ר פּלוס פון 0, סטאַרטינג מיט 0, מיר וואָלט דעמאָלט סאַכאַקל אַלע די נומערן אין אַז רשימה. און אַז ס אַ רשימה 1-3. קאַנער האַרריס: אזוי צו לייגן עס אנדערן וועג, פאַרלייגן ר נעמט דרייַ טענות. עס ס אַ פֿונקציע וואָס זיך נעמט צוויי טענות, דעמאָלט דאָרט ס אַ סטאַרטער ווערט, און עס ס אַ רשימה פון וואַלועס. און וואָס איר טאָן איז איר נעמען סטאַרטער ווערט, ערשטער ווערט, שטעלן זיי אין די פֿונקציע. וואָס טאָן איר באַקומען אויס, נעמען אַז, קאָרמען אַז אין די פֿונקציע פון ​​די רגע ווערט, וואָס איר באַקומען אויס, נעמען אַז, קאָרמען אַז אין די פֿונקציע פון ​​די דריט ווערט. און דעריבער אויב איר גיין אַראָפּ דעם גאנצע רשימה דעם וועג, איר ניטאָ געגאנגען צו באַקומען יווענטשאַוואַלי עטלעכע מעשונעדיק ווערט אַז ס פון די זעלבע טיפּ פון וואָס איר סטאַרטעד אויס מיט און פון דער זעלביקער טיפּ ווי דאס אין דער רשימה, און דעמאָלט אַז ס די צוריקקומען רעזולטאַט פון פאַרלייגן אַר סטיווען קרעווסאָן: אזוי אין באַזונדער, די ביסט העכער סדר פֿעיִקייטן, ווייַל זיי ניטאָ גענומען אנדערן פונקציאָנירן ווי איינער פון די טענות. קאַנער האַרריס: יאָ. אויב איר ווע געניצט זיכער אנדערע לאַנגואַגעס-- איך וויסן ר, [ינאָדאַבאַל] שפּראַך האט דעם, גערופֿן רעדוצירן. איר זאל האָבן ענלעך פֿעיִקייטן אין אנדערע שפּראַכן, נאָר גערופֿן פאַרשידענע זאכן. סטיווען קרעווסאָן: און וואָס ס פייַן וועגן פאַרלייגן ר אין דעם בייַשפּיל איז אַז פאַרלייגן ר קענען אַרבעטן מיט אַנלימאַטאַד רשימות. אַזוי אין דעם דנאָ, דעם P5 איז דזשענערייטינג די הערות אַז זענען אויסגעדרייט אויף אין די שריט סעקווענסער פֿאַר עטלעכע פּויק טייל, די פינפט פּויק טייל, און אפֿשר עס ס אַ קאָנגאַ פּויק אָדער עפּעס. און דעם איז אַ דיליבראַטלי אַבטוס וועג פון שרייבן דעם, אָבער עס ס שפּאַס, ווייַל עס דעמאַנסטרייץ אַ פּלאַץ פון זאכן וועגן Haskell און עוטערפּעאַ. אַזוי פאַרלייגן ר פון דעם קאָלאָנ-- צווייפּינטל איז נאָר אַ אָפּעראַטאָר אַז פּושיז זאכן צוזאַמען אויף אַ ליסט-- גערופֿן אויף אַ ליידיק רשימה, וואָס איז נאָר די ליידיק בראַקאַץ. און איך בין פאַך וואָס אויף דעם אַנלימאַטאַד רשימה. דאס איז טאקע צוויי רשימות צוגעגעבן צוזאַמען אַראָפּ דאָ. די רשימה 1 קאָמע 6 פּונקט פּונקט איז 1, 6, 11, 16. אַזוי האַסקעלל-- אין נאָר אַ ביסל אותיות, איר קענען דזשענערייט די גאנצע סיקוואַנס פון נומערן וואָס זענען פינף נומערן באַזונדער סטרעטשינג אויף זיך ומענדיקייַט. און איך פּרעפּענד צו אַז דעם קירצער ביסל ליסט-- 3, 8, 21-- נאָר צו ווייַזן איר ווי איר קענען קאַנקאַטאַנייט רשימות. און דעמאָלט איך ווע פאָלדעד אויף זיך. און דעם ענדס אַרויף נאָר ווייל אַ מין פון אידענטיטעט אָפּעראַציע, אָבער עס ס אַנלימאַטאַד. און פאַרלייגן ר קענען טאָן אַז, ווייַל עס לאַזאַלי יוואַליוייץ, ווי אין די אויבן. אויב מיר האָבן אַ 1 און אַ 2 און 3, מיר קענען נאָר קאַנטיקער אַוועק די גאנצע מנוחה פון עס. אַז וועט נישט אַרבעטן פֿאַר מינוס אָדער פּלוס, אָבער עס וועט אַרבעטן פֿאַר דעם צווייפּינטל אידענטיטעט אָפּעראַציע אויף דער רשימה. אזוי ווי טאָן מיר פּראַקטאַקלי נוצן אַז אויב מיר האָבן אַ ינפיניטעלי לאַנג רשימה פון זאכן? נו, Haskell גיט אַ פּלאַץ פון פונקטיאָנס-- און קוקן מער אין די אין דיין אייגן טימע-- אַזאַ ווי נעמען וואָס זאגט, גוט, מיר רע דזשענערייטינג דעם אַנלימאַטאַד רשימה, אָבער מיר ניטאָ נאָר געגאנגען צו נעמען עטלעכע נומער פון עס און אין דעם קאַסע-- מיר וועט זען דעם שפּעטער אין אונדזער פּויק מאַשין קאָדע-- גם איז נאָר עטלעכע מין פון גלאבאלע בייַטעוודיק פֿאַר די נומער פון טריט אין די סעקווענסער. אויף די זעמל-אין מאשינען איך געוויזן איר, אַז ס טיפּיקלי 16, אָבער איך האָבן ימפּלאַמענטאַד עס מיט 32. עס טוט ניט טאַקע ענין. Haskell איז אויך ריין, אַזוי עס האט שטאַרק סטאַטיק טייפּינג אַז קאַנער אַלודאַד צו. אַזוי פֿעיִקייטן זענען מאַטאַמאַטיקאַל אין די סענסע-- זיי ניטאָ מער מאַטאַמאַטיקאַל אַז זיי ניטאָ געראַנטיד צו נישט צוטריט אָדער טוישן קיין סאָרט פון בייַטעוודיק אָדער דורכפירן ינפּוט אָדער פּראָדוקציע. אַזוי אויב איר האָבן אַ פֿונקציע, עס ס דעטערמיניסטיק. עס וועט שטענדיק צוריקקומען די זעלבע ווערט אין דער שטאַט פון די פּראָגראַם אָדער בלייַבן די זעלבע. עס זענען, פון קורס, מאָנאַדיק אויסנעמען צו דעם, אָבער אַז ס ווייַטער פון אונדזער פאַרנעם. קאַנער האַרריס: יאָ. וואָס דעם מיטל, כאָטש, איז עס זענען אַ ביסל וויכטיק [ינאָדאַבאַל] קאַנסאַקווענסאַז פון דעם. איינער איז אַז עס ס זייער גרינג צו פּאַראַללעליזע Haskell מגילה. ווייַל אויב איר האָבן, זאָגן, אַ פֿונקציע פון ​​אַז דארף צו אַרבעטן אויף אַ מיליאָן וואַלועס, אויב איר וויסן אַז די פֿונקציע וועט שטענדיק געבן אויס די זעלבע ווערט אויב איר קאָרמען אין אַ זיכער וואַלוע-- אויב איר 'רע [ינאָדאַבאַל] ו פון 1, ו פון 2, דעמאָלט עף פון 3 אָדער ווהאַטנאָט-- ו פון 1 איז ניט געגאנגען צו שרייַבן אויס צו אַ טעקע אָדער טאָן עפּעס וואָס וועט יבערבייַטן די ווערט פון פ2. איר קענען נאָר שפּאַלטן אַרויף דעם פֿונקציע צו אַ מיליאָן פאַרשידענע מאשינען אָדער אַ מיליאָן פאַרשידענע פֿעדעם אָדער וועלכער, באַקומען אַלע די רעספּאָנסעס צוריק, באַקומען אַלע די צוריקקומען וואַלועס צוריק, און דעמאָלט אַז ס עס. אַזוי זייער גרינג צו פּאַראַללעליזע זאכן. די דאַונסייד איז אַז ינפּוט און רעזולטאַט ספּעציעל פּאַסיק אין די טיפּ סיסטעם אין זייער קאָמפּליצירט וועגן. מיר וועלן נישט גיין אין אַז רעכט איצט, אָבער איך מוטיקן איר צו קוק אין עטלעכע רעסורסן אָנליין אויב איר ווילן צו לערנען וועגן אַז. סטיווען קרעווסאָן: אזוי טיפּ קלאַססעס-- און דעם וואַס-- קלאסן פון טייפּס זענען ינווענטיד צו סאָלווע אַ פּראָבלעם פון אָפּעראַטאָר אָוווערלאָודינג. אַזוי מיר געוואלט צו האָבן יקוואַלאַטי צווישן פאַרשידענע טייפּס פון זאכן. דאָך, מיר קען טראַכטן אָפ-- יקוואַלאַטי צווישן נומעריק טייפּס איז זייער גרינג צו טראַכטן וועגן, אָבער וואָס וועגן יקוואַלאַטי צווישן רשימות? וואָס וועגן יקוואַלאַטי צווישן בוים פוס דאַטן סטראַקטשערז? און דעם איז אַלע מעגלעך אין Haskell ווייַל פון טיפּ קלאסן. אַזוי אויב איר דעפינירן אַ זיכער דאַטע טיפּע-- און דאָ, די ביסט מוזיקאַליש פּיטשיז. מיר 'רע לעסאָף געטינג צו עטלעכע קאָמפּיוטער מוזיק. אַזוי מיר האָבן C, C שאַרף, און אַזוי אויף און אַזוי אַרויס. זיי געהערן צו אַ בינטל פון אַנדערש טיפּ קלאסן. עק-- זיי געהערן צו די עק טיפּ קלאַס. אַז מיטל זיי שטיצן יקוואַלאַטי אַפּעריישאַנז. אַזוי איר קענען אָפּשאַצן צי איינער סיקוואַנס פון מוזיקאַליש פּרימיטיוועס איז די זעלבע ווי אַ אַנדערש איינער. זיי געהערן צו די אָרדינאַל קלאַס. אַז מיטל עס ס אַ אָרדערינג צו די. די קומט נאָך סי C שאַרף קומט נאָך C ווי געזונט. זיי געהערן צו די סאָרט ווייַזן, וואָס מיטל זיי קענען ווערן געדרוקט צו אַ קאַנסאָול אָדער וואָקזאַל. זיי געהערן צו דער סאָרט ינומערייטיד, וואָס מיטל אַז אַפֿילו כאָטש די ביסט אותיות, זיי האָבן אַ אַנדערלייינג נומעריק פאַרטרעטונג סטאַרטינג 0 און געגאנגען אַוועק דורך אָבער פילע זאכן זענען דאָ, 20 אָדער אַזוי, אָדער 30 אָדער 40, אפֿשר. קאַנער האַרריס: און ווען מיר האָבן אַ דאַטן טיפּ אַז דעריוועס-- מיט אַז קיווערד "דעריווינג--" אַ זיכער טיפּ קלאַס, עס מיטל אַז די קאַמפּיילער וועט פּרובירן צו בויען עפּעס אויטאָמאַטיש. אַזוי אפֿשר איר וועט וועלן צו דעפינירן אַ קוואַליטעט אנדערש. איר וועט וועלן צו דעפינירן C שאַרף ווי גלייַך צו די פלאַך, פֿאַר משל. מיט דעם קאַנסטראַקשאַן דאָ, איך טאָן ניט טראַכטן C שאַרף און די פלאַך וועט זיין גלייַך, ווייַל די קאַמפּיילער וועט אויטאָמאַטיש זאָגן יעדער אַנדערש מעגלעך ווערט איז בוילעט פון יעדער אנדערער. אַזוי עס איז מעגלעך צו אָווועררייד די ניט ויסצאָלן ימפּלעמענטאַטיאָנס פון די טייפּס פון קלאסן. ווידער, קוק אין די דערמאָנען אויב איר ווילן צו לערנען וועגן אַז. סטיווען קרעווסאָן: און דאָ, אַקטשאַוואַלי, דעם וועט זיין נוציק פֿאַר ווען מיר קאָד שפּעטער. מיר זען עטלעכע פון ​​די ינפיקס אָפּערייטערז פֿאַר סאַקווענטשאַל זאַץ, פּאַראַלעל זאַץ, און אַזוי אַרויס, די פּלאַסיז און גלייַך וואונדער סעראַונדאַד דורך קאָלאָנס. אַז מיטל מיר קענען שפּילן די פאַרשידענע מוזיקאַליש פּרימיטיוועס איינער נאָך די אנדערע. אַז ס סאַקווענטשאַל זאַץ. אָדער מיר קענען שפּילן זיי אין פּאַראַלעל אין דער זעלביקער צייַט. אזוי איך קענען האָבן אַ מוזיקאַליש ווערט, און דעמאָלט דעם יקוואַלז און קאָלאָנס, ינפיקס פּאַראַלעל זאַץ אָפּעראַטאָר, און שפּילן זיי ווי אַ מין פון קאָרד. און מיר רע געגאנגען צו נוצן דעם ווען מיר פאַרבינדן אונדזער פּויק טייל מיט אונדזער קליין פרערע דזשאַק ליד צו שפּילן די צוויי סיקוואַנסיז פון מוזיקאַליש וואַלועס אין דער זעלביקער צייַט. קורריינג יס-- קערי איז לעצט נאָמען פון Haskell קערי, וואס די Haskell בילד איז געהייסן נאָך. און דעם אַלאַוז אונדז אַ פייַן עלאַגאַנס ווען מיר ניטאָ שרייבן אַלע די פאַרשידענע פֿעיִקייטן אָדער Filters אַז מיר ניטאָ געגאנגען צו זיין מאַפּינג איבער אונדזער רשימות. אַ פֿונקציע פון ​​צוויי אַרגומענצ-- ו פון רענטגענ און י-- קענען זיין רעפּריזענטיד ווי ו פון רענטגענ געווענדט צו י. אַזוי עס ס אַ פֿונקציע פון איין אַרגומענט אַז קערט אן אנדער פֿונקציע פון ​​איין אַרגומענט. אַזוי דעם מיטל מיר קענען מאַפּע אַ פֿונקציע ו פון רענטגענ איבער רשימה פון י ס. קאַנער האַרריס: ווילן צו געבן אַ בייַשפּיל פון דעם? סטיווען קרעווסאָן: יאָ. איך האָבן אַ בייַשפּיל רעכט דאָ פֿון עטלעכע פון ​​די זאכן מיר וועט שרייַבן. אַזוי רעפּלאַקייט 2-- געזונט, רעפּלאַקייט וועט נעמען איינער ווערט, וואָס איז ווי פילע מאל צו רעפּלאַקייט עפּעס, און דעמאָלט עס וועט נעמען אַ וואַלוע-- יוזשאַוואַלי אַ רשימה אָדער עפּעס. אַזוי דאָ, מיר רע מאַפּינג רעפּלאַקייט 2 איבער אנדערן רשימה. אַזוי אויב מיר מאַפּע רעפּלאַקייט 2, אויב מיר רעפּלאַקייט 2 צולייגן צו דער ערשטער עלעמענט פון דעם ליסט-- און די ביסט רשימות פון מוזיקאַליש פראַסעס-- וועט פּראָדוצירן צוויי פון "איר סלעעפּינג--" אַזוי זענען איר סליפּינג, זענען איר סליפּינג. אַזוי איצט מיר האָבן צוויי. אבער רעפּלאַקייט נעמט צוויי טענות, אָבער ווייַל מיר ניטאָ קורריינג און דעמאָלט מאַפּינג, מיר קענען פאָרשטעלן רעפּלאַקייט 2 ווי בעת שוין אומגעקערט ווי אַ פֿונקציע פון איין אַרגומענט-- נאָר רעפּליקייטינג צוויי מאָל. און דעמאָלט מיר ניטאָ אַפּלייינג אַז צו יעדער עלעמענט פון דעם רשימה פון קרעם. און קאָנקאַט איז אַ Haskell אָפּעראַציע פֿאַר פלאַטטענינג אַ רשימה. ווייַל רעפּלאַקייט 2 וועט פּראָדוצירן אַ רשימה פון רשימות. און דאָס איז דעם ינטערמידייט פאָרעם דאָ. און אַזוי דעמאָלט מיר קענען קאָנקאַט אָדער פלאַטטען אַז אויס צוויי מאָל. קאַנער האַרריס: אַ סימפּלער לעמאָשל פון קורריינג, אויב איר'ד ליקע-- ימאַדזשאַן ו איז נאָר אַ קייפל פֿונקציע וואָס נעמט צוויי טענות און קערט זייער פּראָדוקט. אַזוי אויב איר האָבן אַ ו 4 5, עס ס 20. אבער איר קענען טראַכטן פון דעם ווי אַלסאָ-- איר האָבן אַ פֿונקציע ו 4 וואָס נעמט אַן אַרגומענט און קערט פיר מאל דעם אַרגומענט-- נאָר פּאַרטיייש אַפּלאַקיישאַן וואָס נאָר איין אַרגומענט 4. און אויב איר קאָרמען ו 4 5, וואָס וועט געבן איר 20. און אַז ס אַ סימפּלער לעמאָשל פון קורריינג. עס ס יוזשאַוואַלי איינער פון די לערנבוך אָנעס. סטיווען קרעווסאָן: לאַמבדאַ אויסדרוקן אָדער אַנאַנאַמאַס פֿעיִקייטן זענען אנדערן Haskell כאַלמאַרק. אַזוי אויב מיר דאַרפֿן צו בייַטש אַרויף אַ קליין פֿונקציע לעבן רעפּלאַקייט, אָבער זאָגן עס ס ניט אין דער נאָרמאַל ביבליאָטעק, מיר קענען נוצן אַ סינטאַקס ענלעך צו דער ווייַטערדיק. און מיר וועט ווינטל איבער דעם. איין זאַך איר וועט זען אַ פּלאַץ פון אין די פּויק מאַשין איז מיר ניטאָ מאכן קאַללס צו עפּעס גערופֿן פילטער, וואָס ווי איידער, איז אַ מאַפּינג פון אַ פֿונקציע איבער אַ רשימה, אָבער עס ס אַ מאַפּינג פון אַ באָאָלעאַן פֿונקציע. אזוי מיר האָבן דאָ אַ בייַשפּיל פון אַ אַ אַנאַנאַמאַסלי Defined באָאָלעאַן פֿונקציע אַז נאָר נעמט אַ פּאָר וואַלועס. דאס איז נישט שטרענג גערעדט אַ אַנאַנאַמאַס פֿונקציע. אבער עס ס דעפינירן מיט אַז סינטאַקס פֿאַר ברעוויטי, און דעם נאָר נעמט רענטגענ מאָדולע נ-- קאַנער האַרריס: יאָ. אַזוי ו איז אַ פֿונקציע פון צוויי טענות N און פּ אַז קערט אַ פֿונקציע וואָס איז זיך אַ פֿונקציע פון ​​איינער אַרגומענט, ניימלי רענטגענ. סטיווען קרעווסאָן: איך דערמאנט ינפיקס אָפּערייטערז. וואָס זענען ינפיקס אָפּערייטערז? נו, ינפיקס אָפּערייטערז זענען די נאָרמאַל וועג מיר פאָרשטעלן אַפּעריישאַנז, זאָגן, אין מאַטהעמאַטיקס-- 2 פּלוס 2 אַנשטאָט פון דער אָפּעראַטאָר פּלוס און דעמאָלט צוויי טענות 2 און 2. קאַנער האַרריס: עס ס גערופֿן פאַרקערט פּויליש נאָוטיישאַן, וואָס איז אַ טערמין איך צווייפל קיין פון איר וואָלט וויסן. סטיווען קרעווסאָן: רעכט. ריווערס פּויליש אָדער פּרעפֿיקס נאָוטיישאַן. אבער Haskell באַשלאָסן צו נוצן ינפיקס אָפּערייטערז. אזוי די ביסט עטלעכע פון דער מנהג אָנעס אַז זענען Defined פֿאַר די עוטערפּעאַ דסקל אין Haskell. אזוי דעם איז סאַקווענטשאַל זאַץ. דעם איז פּאַראַלעל זאַץ, און דעם איז טרונקאַטינג פּאַראַלעל זאַץ. און מיר וועט דאַרפֿן אַז מיט אונדזער פּויק מאַשין, ווייַל מיר וועט נוצן די לעצטע אָפּעראַטאָר אין אַז קליין טופּלע עס צו שפּילן די פּויק מאַשין צוזאמען מיט אונדזער פרערע דזשאַק ליד. און אונדזער פּויק מאַשין איז געגאנגען צו זיין אַנלימאַטאַד. עס נאָר plays אויף אייביק. אבער די פרערע דזשאַק ליד איז ניט. עס ס ניט אַז לאַנג. עס ס נאָר אַ ביסל באַרס. אַזוי מיר דאַרפֿן צו האַלטן די פּויק מאַשין ווי באַלד ווי דער קירצער מוזיקאַליש ווערט קומט צו אַ סוף. און אַז ינפיקסעד אָפּעראַטאָר איז סופּער נוציק מיט וואָס. און ינפיקס נאָוטיישאַן ווי דעם איז מין פון פייַן, ווייַל זאָגן איר האָבן אַ פֿונקציע ווי ציטירן, וואָס גיט די ינטאַדזשער טייל פון רענטגענ דורך עפּעס עלסע-- אנטשולדיגט, וואָס זאָל זיין אַ און ב. איר קען שרייַבן עס ווי אַ ציטירן פון ב. אַזוי אויב איר פּוט-- עלעמענט איז אן אנדער בייַשפּיל פון דעם. רענטגענ עלעמענט אין עטלעכע רשימה, אויב איר שטעלן עס אין באַקקטיקקס, איר קענען נוצן עס. כאָטש עס ס ניט אַ סימבאָל ווי פּלוס אָדער מינוס אָדער מאל, איר קענען נוצן די נאָמען פון אַ פונקציאָנירן ווי אַז אין באַקקטיקקס ווי ינפיקס אָפּעראַטאָר, וואָס איז שיין קיל. קאַנער האַרריס: ווידער, דאָס איז אַלע נאָר סינטאַקטיק צוקער, טאַקע. עס טוט ניט ווירקן די האַרץ פון שפּראַך. סטיווען קרעווסאָן: אזוי מיר זען דאָ פֿאַר די לעצטע פראַזע פון ​​אונדזער פרערע דזשאַק ליד, איך פּלייַעד עטלעכע ביסל קאָרדז אָדער טערדז ניצן די פּאַראַלעל זאַץ אָפּעראַטאָר. דאס איז אן אנדער וועג פון זאגן עטלעכע פון וואָס מיר ווע נאָר געווען געזאגט. אַזוי איר קענען מאַפּע פֿעיִקייטן פון איין אַרגומענט איבער רשימות. קאַנער האַרריס: ווידער, רעפֿערענצן פֿאַר האַסקעלל-- ינטראָדוקטאָרי טעקסטבוקס וועט האָבן אַלע פון ​​דעם אין עס. סטיווען קרעווסאָן: אַזוי דאָ ס אַ שיין שליסל שורה פון די שריט סעקווענסער מיר וועט נעמען אַ קוק אין ניצן אַ רשימה קאַמפּריכענשאַן. און מיר זען דאָ איז אַז עלעמענט אין פאַרפעסטיקט אָפּעראַטאָר אין צוריק ציטירט. אַזוי אויב רענטגענ איז אַן עלעמענט פון דער רשימה פון רענטגענ ס, דעמאָלט מיר וועט רופן זיך פּערק פֿעיִקייטן. אַזוי פּערק איז נאָר אַ שלאָג פֿונקציע. עס נעמט עטלעכע ווערט פּ אַז ס אַ טייל פֿון דער באַונדאַד שטעלן פון אַלע די פאַרשידענע שלאָג סאָונדס אַז מיר געזען אין אַ פרייַערדיק רוק, און דעמאָלט עס גיט אַז געדויער פון 1/4 טאָן. אַנדערש עס גיט עס אַ קנר, און קנר איז נאָר 1/4 טאָן מנוחה. אזוי דעם איז בנין אַרויף עפּעס פייַן. מיר האָבן אַ רשימה פון עלעמענטן, און מיר וועט שלייף איבער עטלעכע רשימה פון איין צו די מאַקס ווערט פון אונדזער שריט סעקווענסער. און ווען מיר ניטאָ אין אַ באַזונדער איך אין אַז רשימה פון איין צו די מאקס ווערט, אויב אַז איך איז אַ מיטגליד פון דעם שטעלן Created אין דעם פֿונקציע, געזונט, דעמאָלט מיר ווענדן עס זיך אַ שלאָג טאָן. אַנדערש, מיר נאָר שפּילן אַ מנוחה, וואָס איז צו זאָגן, מיר נאָר בלייַבן שטיל. און מיר קענען זען דאָ אַז אין דעם רשימה קאַמפּריכענשאַן סינטאַקס, רענטגענ איז פּאַפּיאַלייטאַד דורך דעם רשימה קאַנסטראַקטאַד איין צו די גלאבאלע גרייס פון די סעקווענסער. קאַנער האַרריס: יאָ. די גרונט סינטאַקס פֿאַר רשימה קאָמפּרעהענסיאָנס איז קאַנטיקער, ווערט ינוואַלווינג עטלעכע וועריאַבאַלז, באַר, מעגלעך וואַלועס פון די וועריאַבאַלז זיך, פֿאַרמאַכט קאַנטיקער. און אויב איר ווע געטאן שטעלן בילדער נאָוטיישאַן אין קיין סאָרט פון מאטעמאטיק קלאַס, איר זאל האָבן שטעלן 2 ן אַזאַ וואָס N איז אין אָדער N איז אין ז. ענלעך טהינג-- דעם נאָוטיישאַן איז מענט צו זיין סוגעסטיוו פון וואָס מאַטאַמאַטיקאַל נאָוטיישאַן. סטיווען קרעווסאָן: און איר קענען צולייגן קייפל פּרעדיקאַץ און קייפל Filters אין אַ רשימה קאַמפּריכענשאַן, וואָס איז גאַנץ פייַן. אַלדזשאַבריייק טיפּעס-- מיר וועט נישט זאַמענ לאַנג דאָ. עס ס ניט אַ גוט ייַנפאַל אין Haskell אָדער אַ גוט, קלאָר ווי דער געדאנק פון ווי צו נעמען, זאָגן, אַ ניט ויסצאָלן פּאַראַמעטער צו אַ פֿונקציע אָדער עפּעס. אין פּיטהאָן, דעם איז גאַנץ גרינג. איר קענען נאָר זאָגן מיט יקוואַלז אויף די דעקלאַראַציע פון ​​די פֿונקציע, אַ ניט ויסצאָלן ווערט אין פאַל קיין איז סאַפּלייד. אין Haskell, איר קען אפֿשר נוצן אפֿשר די אפֿשר טיפּ, וואָס נעמט אָדער גאָרנישט אָדער אַ ווערט פון טיפּ נאָר אַ. אַזוי מיר גווורע דעם אין די פּויק מאַשין צו לאָזן אונדז צו געבן אַפּשאַנאַל באַנד פּאַראַמעטערס צו יעדער פון די פּויק טיילן. אַזוי אַז גיט אונדז אַ וועג פון בעת ​​עק אָדער אַ באַנד אויף אַ באַזונדער וועג. קאַנער האַרריס: אין אנדערע Haskell יגזאַמפּאַלז, איר זאל זען אפֿשר געניצט פֿאַר פֿעיִקייטן אַז זאל פאַרלאָזן. דעם איז אַ פּראָסט איינער. סטיווען קרעווסאָן: און איר קענען צושטעלן עטלעכע סאָרט פון טעות אָנזאָג ווי אַ ניט ויסצאָלן. און אַז ס דער הויפּט האַנטיק ווען איר ניטאָ טאן די איך / אָ אין Haskell. אַז קענען זיין טריקס. קאַנער האַרריס: אָדער פֿאַר אַ ענלעך בייַשפּיל, טראַכטן פון אַ פֿונקציע אַז ינוואַלווז אָפּטייל פון אַ פּאַראַמעטער אַז זאל זיין 0. און אַז פֿונקציע קען צוריקקומען אפֿשר וועלכער. אַזוי אויב עס ס ניט אָפּטייל דורך 0, עס וועט צוריקקומען פּונקט וועלכער. און אויב עס איז טייל דורך 0, עס וועט צוריקקומען גאָרנישט ווי אַ וועג פון סיגנאַלינג די טעות. ווייַל איינער קאַנסאַקוואַנס פון Haskell ס זייער שטרענג טייפּינג איז אַז עס ס ניט רעאַל-- אויסנעמען זענען ומגעלומפּערט, בייסיקלי, טעות האַנדלינג איז ומגעלומפּערט. און דאָס איז איין זייער פּראָסט וועג פון טאן עס. סטיווען קרעווסאָן: אזוי איצט מיר באַקומען צו אן אנדער מיינונג-בענדינג זאַך וועגן Haskell, וואָס איז מוסטער וואָס ריכטן און פונקציאָנירן זוך. איך געוויזן איר אין די לעצטע רוק דעם דעקלאַראַציע פון ​​די שריט סיקוואַנס פונקציאָנירן, וואָס האט אַ אפֿשר ווערט, דעמאָלט אַ ינט, דעמאָלט אַ רשימה פון ינץ, דעמאָלט קערט אַ סיקוואַנס פון מוזיק וואַלועס עס אַנאַטייטיד מיט ביידע פּעך און באַנד. אזוי יענע דרייַ טענות קענען זיין מוסטער מאַטשט אין די ווייַטערדיק וועג. און מיר שטענדיק ווילן צו זיין זיכער צו טאָן אַ באַזע פאַל אָדער אַרויסגאַנג פאַל ערשטער. און די ונדערסקאָרעס קענען נאָר זיין ינטערפּראַטאַד צו מיינען קיין ווערט אַז ס עס. אַזוי אויב מיר באַקומען אַ רוף צו שריט סיקוואַנס מיט עטלעכע ווערט, עטלעכע אנדערע ווערט, און דעריבער די ליידיק רשימה, וואָס מיר ווילן צו צוריקקומען איז נאָר שטילקייַט, אַ רו 0. און אַנשטאָט פון אַז ווייל אַ ליידיק רשימה אָדער 0, עס ס אַ מנוחה 0, ווייַל מיר ניטאָ דילינג מיט די מוזיק טיפּ, און די ליידיק רשימה פון די מוזיק טיפּ איז נאָר אַ מנוחה פון קיין געדויער. עס ס קיין מוזיק. און דעמאָלט מיר זען אויב מיר באַקומען אַ שריט סיקוואַנס מיט אַ V פֿאַר באַנד אַרגומענט, פּ פֿאַר פּריקאָשאַן קיילע אַרגומענט, און דעמאָלט אַ רשימה פון רענטגענ ס. דעמאָלט מיר טאָן עטלעכע שטאָפּן. אין באַזונדער, מיר צולייגן דעם רשימה קאַמפּריכענשאַן, און מיר דורכפירן עטלעכע אַפּעריישאַנז אויף די אפֿשר ווערט צו ווענדן עס אין אַ נומעריק ווערט אַזוי אַז עס קען זיין דעמאָלט ינומערייטיד און געוויינט צו סעלעקטירן דעם קיילע. ווידער, דעם איז אַ קליין ביסל דיליבראַטלי ינקאָנסיסע נאָר צו ווייַזן אַלע די טשודנע דאס איר קענען טאָן אין Haskell ווי איר נעמען אַ קוק אין עס אויף דיין אייגן צייַט. אַלע רעכט. אזוי מיר ניטאָ לעסאָף געטינג צו טאָן וואָס מיר שטעלן אויס צו טאָן, וואָס איז מאַכן עטלעכע קאָמפּיוטער מוזיק. אזוי מיר ניטאָ געגאנגען צו פּרובירן צו מאַכן די פרערע דזשאַק ליד. אַזוי עס זענען ווי פילע קרעם אין פרערע דזשאַק? פיר. גרויס. און וואָס ס פייַן איז אַז זיי ניטאָ אַלע ריפּיטיד דער זעלביקער סומע פון ​​מאל, וואָס איז צוויי. אַזוי מיר האָבן פיר ראָד יעדער ריפּיטיד צוויי מאל. און אין באַזונדער, זיי ניטאָ אין אַ קייַלעכיק. און עס זענען פילע, פילע וועגן צו ינסטרומענט אַ קייַלעכיק אַז קען זיין שפּאַס צו טאָן. איך ווע געטאן עס אין אַ שיין פּשוט וועג דאָ, וואָס איז נאָר צו קאָנסטרוקט-- די שורה פֿונקציע נעמט אַ רשימה פון מוזיק וואַלועס און טורנס עס אין סאַקווענטשאַל זאַץ דורך אַפּלייינג אַז סאַקווענטשאַל זאַץ אָפּעראַטאָר. און דעמאָלט איך פאַרהאַלטן די פאַרשידענע פּאַרץ דורך מאכן זיי אָנהייבן מיט אַ רו. אַזוי איך אָנהייבן מיט אַ מנוחה פון צוויי מיטלען, און דעמאָלט אַ רו פון פיר מיטלען, און דעמאָלט אַ רו פון זעקס מיטלען, און דעריבער די קייַלעכיק אַרבעט, ווי מיר אַלע וויסן דעם ליד. מיר זען צוויי אַנאַטיישאַנז אָדער מאָדיפיקאַטיאָנס פון די מוזיק וואַלועס וואָס זענען קאַנטיינד אין דעם סאַקווענטשאַל אָרדענונג פון מוזיק עלעמענטן. מיר האָבן אַ לייגן באַנד. דאס איז אַ פֿונקציע צו אַנאַטייט מוזיק מיט אַ באַזונדער באַנד. דאס איז אַ גוט בייַשפּיל פון אַ מידי סיגנאַל פליסנדיק 0-127, די זיבן ביטן פון אינפֿאָרמאַציע אַז קענען ווערן געטראגן. און טהענ-- מיר געזען עס זייער בעקיצער, אָבער די אַלגעמיינע מידי רשימה פון אַלע די פאַרשידענע ינסטראַמאַנץ. און עס ס ניט אַ גאַנץ פּלאַץ פון זיי. אויב איר נוצן אַ דיגיטאַל אַודיאָ ווערקסטיישאַן, ווי אַבלעטאָן לעבן אָדער פּראָ מכשירים, עס ס אַ ינקרעדאַבלי ווידער קייט פון סינטאַסייזערז און ווסט ינסטראַמאַנץ. אבער די מידי נאָרמאַל בלויז האט אַ ביסל, אָדער עטלעכע טוץ. און עטלעכע פון ​​זיי זענען מאָדנע. איך געדאַנק עס וואָלט זיין שפּאַס אויב מיר פּלייַעד די קיילע די מידי קיילע העליקאָפּטער, און דעמאָלט דער ווייַטער וועג דורך די קייַלעכיק, מיר האבן אַ בלאָק סינטה, און דעמאָלט פון דעם קאָרני פירן קוואַדראַט פאָכן סינטה, און דעמאָלט קול וז, וואָס זענען אַ ביסל ומקלאָר אויף מיין שלעכט מידי סינטאַסייזער, אָבער זיי גוט. און דעמאָלט מיר זען דעם לאָזן און אין סינטאַקס פון Haskell, און דעמאָלט מיר ניטאָ פּלייינג אַלע די טיילן צוזאַמען מיט די פּאַראַלעל זאַץ אָפּעראַטאָר. און מיר קען מיסטאָמע ווייַזן עטלעכע פון ​​דעם. דאָ ס די קאָד. און איר קענען זען אין C, עס 'ד ווערן אַ פּלאַץ פון האַלדז פּאָליאַנע און באַשטעטיקן די טיש קאָד איידער איר קען מאַכן מוזיק ווי דעם. אָדער קיין אנדערע פּראָגראַממינג שפּראַך, איר'ד מסתּמא האָבן צו ינטעראַקט מיט עטלעכע סאָרט פון ביבליאָטעק אָדער אַפּי און שטעלן אַלץ אַרויף, און דעמאָלט איר 'ד האָבן צו ריין אַרויף. אבער דאָ אין Haskell איז, איך טראַכטן, אַמאָל איר באַקומען די הענגען פון עס, ינקרעדאַבלי ליינעוודיק און זייער יקספּרעסיוו. אַזוי עס איז די ימפּלאַמענטיישאַן פון פרערע דזשאַק. אַלע רעכט. איצט מיר ווילן צו לייגן שלאָג, און דעם איז אַ קליין ביסל מעססיער. אַזוי לאָזן ס נעמען אַ קוק אין די סליידז. אַזוי די גרויס געדאַנק איז צו מאַכן אַ בינטל פון רשימות אָדער פּאַרץ. אויף די זעמל-אין מאשינען, עס זענען טיפּיקלי וועגן אפֿשר אַכט צו 10 ריטם אָדער שלאָג טיילן. און דעמאָלט נוצן אַ בינטל פון טעקניקס. און מיר ווע גערעדט וועגן טהעסע-- ניצן פאָלדס, Filters, לאַמבדאַ פֿעיִקייטן, מאַפּט איבער רשימות צו דזשענערייט וואַלועס אין עטלעכע קייט 1 ר, ר איז 16, אָדער 32 טריט אין די סעקווענסער. און דעריבער אויב עס ס אַ ווערט אין אַז רשימה ווי מיר ניטאָ פליסנדיק דורך די סעקווענסער, פליסנדיק דורך עס איבער און איבער, עס טורנס אויף אַז טאָן, און אַז מוסטער געץ טריגערד. דאָ זענען אַלע די פאַרשידענע טשודנע וועגן איך געקומען אַרויף מיט צו דזשענערייט הערות. פּרובירן עס אויף דיין אייגן האַלב סאַכאַקל. עס וועט געזונט קיל. צייַט פּערמיטינג, מיר וועט גיין דורך דעם. אבער פֿאַר רעכט איצט, איך האב מיר זאָל דעמאָ וואָס מיר האָבן. זאל ס האָפֿן דעם גייט גוט. אזוי דעם איז גהסי. און מיר וועט מאַסע אַ טעקע איך האָבן גערופֿן סאָנג.להס, וואָס איז די טעקע איך נאָר געוויזן איר. גוט, גרויס. ווי קאַנער האט פריער, עס קאָמפּילעד, עס טיפּ אָפּגעשטעלט, אַזוי איך קענען אָטעמען אַ פּלאַץ גרינגער. עס ס ניט געגאנגען צו קלאַפּ אַרויף אויף מיר. איך האט ווילן צו ווייַזן איר עפּעס נוצלעך. איר קענען זען אַז אַ מאָדולע לאָודיד גערופֿן 50. איר קענען בלעטער וואָס מאָדולע. און דאָס איז אַזוי פייַן וועגן דאָינג-- אפֿשר וואָס איר ניטאָ טאן אין Haskell איז ניט גערופֿן ווייכווארג אַנטוויקלונג, אָבער איר קענען טאָן אַ פּלאַץ פון שפּאַס שטאָפּן אויף דיין אייגן. און די וואָרקפלאָוו איז טאַקע פייַן ווי קאַמפּערד צו אַ פּלאַץ פון אנדערע שפּראַכן, ווייַל איר קענען זען אין אַ טאַקע ליינעוודיק וועג וואָס ס געגאנגען אויף. אזוי מיר זען אַז מיר האָבן אַלע די הינט, וואָס זענען רשימות פון מוזיק פּיטשיז, און דעמאָלט מיר בויען די אַרויף אין עפּעס גרעסער, וואָס איז אַ מוזיק ליד. עס ס אַ מוזיקאַליש אַפּאַראַט. און דעמאָלט מיר קענען שפּילן דעם אַלע מיט אַ פֿונקציע גערופֿן שפּילן מוזיק. איר קענען זען אַז אַראָפּ דאָ. וואָס איז נאָר שפּילן. איך זאָל סייַ-- איך האט ניט רעדן וועגן דעם דאָלאַר צייכן אַז ס אומעטום. דאָללאַר צייכן איז אן אנדער ינפיקס אָפּעראַטאָר. אבער עס האט די לאָואַסט פאָרהאַנט פון קיין אָפּעראַטאָר, וואָס Effectively מיטל אַז אַלץ אויף די לינקס פון דער דאָלאַר צייכן און די רעכט פון דער דאָלאַר צייכן, מיר רע געגאנגען צו באַקומען עוואַלואַטעד איידער עס. אַזוי עס ס סאָרט פון ווי אנדערן וועג פון אַדינג פּאַרענטהעסיס. קאַנער האַרריס: עס ס בייסיקלי פֿונקציע זאַץ. און עס ינשורז אַז איר טאָן ניט האַווע-- אויב איר האָבן פֿעיִקייטן אָדער זייַט אָדער ינפיקס אָפּערייטערז אויף אָדער זייַט, זיי וועלן ניט מיטאַרבעטער אַריבער עס און געבן איר אומגעריכט רעזולטאַטן. סטיווען קרעווסאָן: אזוי מיר קאַנ-- ניצן אַז, מיר קענען רופן. ערשטער, מיר וועט שפּילן עס אָן די דראַמז. אַז ס די העליקאָפּטער, די מידי העליקאָפּטער. [מוזיק פּלייינג] עס ס די קוואַדראַט כוואַליע. דער קול וז. און איר קענען טאַקע גיין ווילד מיט דעם. איך פּיקט אַ שיין פּשוט איינער, ווייַל איך געוואוסט איך זאָל ניט בייַסן אַוועק מער ווי איך קען קייַען. נאָר האַלטן עס שיין פּשוט צו ווייַזן די הויפּט געדאנקען. אבער דעמאָלט איך איז געווען ווי, מיר ווע גאַט צו שטעלן עטלעכע דראַמז צו דעם. נאָר ווייַל דאָס איז אַ ביסל ימפּענאַטראַבאַל, און איך האט ניט נוצן די נאָמען פון די פּויק טיילן, איך מאַפּט טהעמ-- ווייַל זיי ניטאָ טייל פון אַז ינומערייטיד קלאַס, איך מאַפּט זיי צו ינץ. איינער איז ווי אַ באַס פּויק. נול איז ווי געזונט. זיבן איז אַ הויך הוט. און אַראָפּ אין דאָ ווו די פֿעיִקייטן באַקומען אַ ביסל מער ראַנדאָם, די ביסט ווי קאָנגאַ דראַמז. אזוי אויב איר טראַכטן אַבאָוט-- אפֿשר אַ שפּאַס וועג צו ינסטרומענט אַ פּויק מאַשין איז צו נוצן זייער אָרדערלי פּאַטערנז אויף דיין באַס פּויק. אַזוי פֿאַר בייַשפּיל, אויף פֿילטרירונג איבער די רשימה מיט אַלץ וואָס גיט צוריק אַ 1 ווען עס ס גענומען מאָדולע 04. אזוי איך באַקומען 1, 5, 9, 13, 17-- אַזוי דעם איז דער ערשטער שלאָגן פון יעדער מאָס. און דעמאָלט דעם איז דער זעלביקער זאַך שיפטעד איבער צוויי טריט. אַזוי אַז ס די אָפפבעאַט. אַזוי דעם וואָלט זייַן עפּעס ווי אַ הויך הוט. און דעמאָלט ווידער, אַראָפּ דאָ, עס ס אַ ביסל ראַנדאָם, ווייַל מיר ניטאָ טאן קאָנגאַ דראַמז. און איך האָבן עטלעכע מאַראַקאַס אַראָפּ דאָ, אויך. אַזוי איך קען רופן שפּילן פּויק מאַשין, אָבער עס וואָלט גיין אויף אייביק, און עס זאל אָנהייבן גראַבינג זיך אַלע די זיקאָרן אין מיין סיסטעם. אַזוי איך וועט רופן דעם פֿונקציע שפּילן מוזיק, וואָס ווי מיר וועט זען, נוצן די טרונקאַטינג פּאַראַלעל זאַץ צו שפּילן אונדזער ביסל פרערע דזשאַק ליד צוזאמען מיט דעם טשודנע פּויק מאַשין. אַזוי לאָזן ס נעמען אַ קוק. און ביטע טאָן פֿאַרבעסערן אויף מיין אָרדענונג פון אַלע די פּויק טיילן. ניט מיין ספּעציאַליטעט, אָבער איך האט אַ פּלאַץ פון שפּאַס טאן עס. [מוזיק פּלייינג] אַזוי פון קורס, דעם איז אַלע אַ קליין ביסל ניט ווי שפּאַס אויב מיר קענען נישט בייַטן עס צו אַ כעזשבן אַזוי אפֿשר עס קען זיין ינטערפּראַטאַד דורך אַ מענטש פּערפאָרמער. אַזוי איך וועט ניט לויפן עס דאָ. איך ווע שוין דזשענערייטאַד די טעקעס. איר קענען זען אַז עס ס אַ פּונקט ליליפּאָנד פילע-- און דעם וועט זיין מיין סעגוע איבער צו קאָננאָר-- און אַ פּונקט מידי טעקע, און אַ פּונקט פּדף טעקע, וואָס איז וואָס ליליפּאָנד וועט לעסאָף דזשענערייט. אבער די ביסט יענע סקריפּס, און איך וועט נאָר לויפן זיי מיט זייער הילף אָפּציעס. אויב איר באַקומען די אַרויף און פליסנדיק מיט עוטערפּעאַ, איר קענען דזשענערייט אַ מידי טעקע. און דעמאָלט פון די מידי טעקע מיט דעם מידי 2לי פּראָגראַם, איר קענען דזשענערייט אַ ליליע פּאָנד טעקע, און דעמאָלט איר קענען דזשענערייט אַ פּדף פון די כעזשבן. און מיר זאָל נעמען אַ קוק אין דעם. אַזוי קאַנער וועט מיסטאָמע ווייַזן איר ווי צו אַנאַטייט דעם בעסער, אָבער דאָס איז פרערע דזשאַק ווי דזשענערייטאַד דורך מיר אין עוטערפּעאַ. עס ס נאָר אין סי איך זאָל האָבן פיגורעד אויס וואָס די כאַק עס ס אַקטשאַוואַלי אין. אבער אַז איז די פּייפּליין פֿאַר ווי איר טאָן אַז מיט וואָס. זאל ס רעדן מער וועגן ליליפּאָנד. קאַנער האַרריס: OK זאל ס זען. האט איר דערמאָנען לערנען איר Haskell? סטיווען קרעווסאָן: טאַקע יאָ. טשעק אויס לערנען איר Haskell. עס ס אין די רעסורסן. אַז ס ווי איך סטאַרטעד לערנען, און עס ס גרויס. ניט שטום וויסן. קאַנער האַרריס: אזוי עס ס אָנליין. אזוי אַ באָכער געהייסן [ינאָדאַבאַל] learnyouahaskell.com, קיין ספּייסיז. גראַמאַטיק איז קראַנק. סטיווען קרעווסאָן: עס ס ילאַסטרייטאַד, אויך. קאַנער האַרריס: אַזוי וואָס איז ליליפּאָנד? עס ס אַ דעקלאַראַטיווע פּראָגראַממינג שפּראַך פֿאַר מוזיק טייפּסעטינג. אַזוי דעקלאַראַטיווע-- איר קענען טראַכטן פון זאכן ווי HTML, ווו איר ניטאָ ניט סייַינג-- HTML טוט נישט זאָגן ווי וועב בראַוזערז זאָל ופפירן בלעטער שריט דורך שריט. עס ס נאָר געזאגט דעם איז אַ טעקסטשאַוואַל באַשרייַבונג פון וואָס איר ווילן די בלאַט צו קוקן ווי. און דעמאָלט עס ס אויך אַ פּראָגראַם אַז קאַמפּיילז דעם שפּראַך, אָדער עס לייענען זייַן אין און דעמאָלט אַקטשאַוואַלי טוט די טייפּסעטינג פֿאַר איר, און עס ספּיץ אויס די ווונדערלעך קוקן פּדף סקאָרז. איר קענען אויך באַקומען פּנג פֿאָרמאַט אָדער וועלכער. א גוט וועג צו טראַכטן פון דעם איז דורך אַנאַלאַדזשי איז אַז לייטעקס איז סאָרט פון ווי לילליפּאָנד, אָבער פֿאַר נאָר פּראָסט טייפּסעטינג. אזוי אַנשטאָט אָפ-- עס ס ניט וויסיוויג, וואָס איר זען איז וואס איר באקום, ווי, זאָגן לעצט איז, אָדער סיבעליוס, אָדער מייקראָסאָפֿט וואָרט, ווו איר קענען דרוקן אין פאַקטיש צייַט און פּלאַן זאכן אין פאַקטיש צייַט און זען ענדערונגען ינסטאַנטאַניאַסלי. עס איז טעקסט באזירט. איר האָבן צו צונויפנעמען דיין סקאָרז ניצן אַ באַזונדער פּראָגראַם און באַקומען אויס פּדפס שפּעטער. דאס איז אַ ביסל ווייניקער באַקוועם פֿאַר נוצן אויב איר ניטאָ טריינג צו שרייַבן גלייַך זיך אַ כעזשבן און איר ניטאָ טריינג צו קאַמפּאָוז אויף די קאָמפּיוטער. אבער עס זענען אַ פּלאַץ פון אַדוואַנטאַגעס פֿאַר עס. איינער, עס טוט קוקן אַ פּלאַץ ניסער, ווייַל לילליפּאָנד קענען אַקטשאַוואַלי נעמען די צייַט צו טאָן אויסלייג דיסיזשאַנז רעכט, ניט ענלעך סיבעליוס אָדער לעצט, וואָס האָבן צו מאַכן קאַמפּראַמייזד אַלגערידאַמז אַזוי אַז זיי קענען אַרויסווייַזן זאכן אין פאַקטיש צייַט. אַזוי וואָס איז ליליפּאָנד-- קאָמפּיוטער graphics איז שווער. אויב איר ניטאָ טאן עפּעס מיט מוזיק און איר ווילן צו שרייַבן אויס סקאָרז, איר טאָן ניט ווילן צו שרייַבן אויס אַלץ דורך זיך סטאַרטינג מיט ווי צו ציען סטאַפפס און ווי צו ציען נאָטעפּאַדס. עס ס זייער שווער. עס ס שוין געטאן איידער. ניטאָ פייַן. אויב איר ווילן צו נוצן לעצט אָדער סיבעליוס, די טעקע פֿאָרמאַטירונגען פֿאַר די זאכן זענען זייער קאָמפּליצירט, און איר קענען ניט טאַקע נוצן זיי פּראָגראַממאַטיקאַללי. איר קענען עפענען אַרויף סיבעליוס מיט לעצט און גיין צו טעקע, עקספּאָרט ווי פּדף זיך, אָבער איר קענען ניט טאַקע רופן אַז פון אַ שריפט. לילליפּאָנד, איר קענען רופן פון יענע סקריפּס. איר קען לייכט יטעראַטע לילליפּאָנד מיט לייטעקס. איך וועט ניט האָבן אַז פיל צייַט צו גיין אין די טעקנאַלאַדזשיז רעכט איצט, אָבער זיי עקסיסטירן. אויב איר ווילן צו קוק זיך אַ לילליפּאָנד בוך, עס ס אַ פּראָגראַם וואס קומט מיט דיין לילליפּאָנד פאַרשפּרייטונג, און עס ס פֿאַר יטעראַטינג לילליפּאָנד פראַגמענץ אין לייטעקס אויב איר ווילן צו טאָן עפּעס ווי אַ גרויס מוסיקאָלאָגי דאָקומענט מיט יגזאַמפּאַלז, פֿאַר משל. און עס ס אַ גוט בקיעס פֿאַר לעבן אויב איר ניטאָ טאן עפּעס מיט מוזיק, ניט נאָר קס50. איך ווע געניצט לילליפּאָנד פֿאַר אַלע פון מיין זאַץ פּראַדזשעקס זינט איך איז געווען בייסיקלי אַ עלטער אין הויך שולע. אזוי דאָ זענען עטלעכע פּשוט יגזאַמפּאַלז. דעם איז בייסיקלי רעפּריזענאַטיוו פון די מדרגה פון שוועריקייט אַז רובֿ מענטשן וואָלט פּנים עס זיי זענען טריינג צו נוצן ליליפּאָנד פֿאַר פּשוט פּראַדזשעקס. דאס ערשטער איינער איז די אָנהייב צו אַ טשאָראַלע פאָרשפּיל דורך באַק. דעם דנאָ איינער איז אַ עקסערפּט פֿון איין פון מיין אייגן אַרבעט, און עס ס נאָר דאָרט צו ווייַזן איר זאכן ווי [ינאָדאַבאַל] פּאַטינג קייפל שורות אין דער זעלביקער שטעקן, ווי ליריק ונדערסעטטינג אַרבעט. ליריק ונדערלייַס זענען אַ זאַך וואָס איז זייער גרינג צו נוצן ליליפּאָנד פֿאַר קאָראַל מוזיק. און אַזוי דעמאָלט דאָרט ס עטלעכע מער קאָמפּליצירט יגזאַמפּאַלז דאָ. כל די ביסט געשען אין ליליפּאָנד און זיי ניטאָ פעאַסיבלע. דעם ערשטער עקסערפּט איז פֿון [ינאָדאַבאַל] דורך [ינאָדאַבאַל]. און דעם [ינאָדאַבאַל] פֿון אַ שטיק פֿאַר סאָלאָ באַס פלייט דורך [ינאָדאַבאַל], וואס איז אַ לאָנגטימע-- וואס איז אַ לאָנגטיים מיטגליד פון די מוזיק אָפּטיילונג דאָ, איך טראַכטן. איך בין נישט זיכער ווו ער ס ניטאָ אַוועק צו. אבער ער איז געווען די אַדווייזער פון די האַרוואַרד מלחינים אַססאָסיאַטיאָן פֿאַר אַ לאַנג צייַט. ווונדערלעך מענטש. און ער שרייבט עטלעכע מוזיק וואס האט זייער קאָמפּליצירט נאָוטיישאַן אַז לילליפּאָנד קענען נאַנדאַלעס שעפּן זייער נייסלי. אזוי נאָר צו געבן איר אַ זינען פון וואָס דעם זאַך ס קייפּאַבילאַטיז אַרע-- אַזוי די ינטערנאַלס פון לילליפּאָנד זענען זייער קאָמפּליצירט. און איר קענען נוצן עס פֿאַר אַ לאַנג צייַט, כולל פֿאַר עטלעכע שיין קאָמפּליצירט זאכן, אָן טאַקע ווייל צו וויסן אַ פּלאַץ וועגן זיי. אבער די גרונט געדאַנק איז אַז אויף די לאָואַסט מדרגה, די אַטאָמס פון לילליפּאָנדס זענען די הערות. די הערות אַנטהאַלטן אַ קאָנטעקסט גערופֿן קולות. אַזוי דער קול קאָנטעקסט בייסיקלי קאָראַספּאַנדז צו אַ איין שורה פון פּאָליפאָני. און דעמאָלט קאָנטעקסט קענען זיין קאַנטיינד היעראַרטשיקאַללי אין העכער מדרגה אָנעס אַז פאָרשטעלן סטאַפפס אויף די כעזשבן אָדער גרעסערע גראָופּינגס ווי פּיאַנע סטאַפפס אָדער כאָר סטאַפפס, און דעמאָלט יווענטשאַוואַלי גאנצע כעזשבן קאַנטעקסץ. און איר קענען אַקטשאַוואַלי ענקאַמפּאַס קייפל סקאָרז אין אַ בוך. און יעדער קאָנטעקסט האט אַ נומער פון אַטאַטשט ענגראַווערס. אויב איר קוק דורך די אינהאַלט פון אַ קאָנטעקסט און דרוקן אַ זיכער סימבאָל אָדער אַ זיכער סאָרט פון סימבאָלס ווי נייטיק. אזוי צו יעדער קול קאָנטעקסט, עס ס [ינאָדאַבאַל] הערות ענגראַווער אַז איז בייסיקלי אַ פֿונקציע אָדער אַ כייפעץ אַז שרייבט אויס אַלע די טאָן קאָפּ אויף די רעכט טיילן פון אַ בלאַט. דעמאָלט דאָרט ס אַ שפּאַלט ענגראַווער, וואָס שרייבט אויס קלעפץ אויף די שטעקן. דעמאָלט דאָרט ס אַ מעטראָנאָמע צייכן ענגראַווער אַז שרייבט אויס מעטראָנאָמע מאַרקס אין אַ כעזשבן. און אַלע די פּאַסיק שיין געזונט אין די כייעראַרקי. און עס ס זייער, זייער, זייער קוסטאָמיזאַבלע, וואָס איר דאַרפֿן אויב איר ווילן צו באַקומען דאס ווי אַז. אזוי אַלע די קאַנטעקסץ האָבן אַ פּלאַץ פון פאַרשידענע אַטריביוץ אַז איר קענען מאָדיפיצירן פֿאַר אַלץ פון די ספּייסינג צו פאַרשידן שריפֿט סעלעקציע צו סיזעס פון זאכן. אויב איר ווילן צו טאָן אַפֿילו מער קאָמפּליצירט זאכן, עס ס אַ עמבעדיד סקריפּטינג שפּראַך. זיי נוצן סכעמע, וואָס איז דיאלעקט פון ליספּ. די מיסטאָמע טאָן ניט מיינען עפּעס צו איר. אבער בייסיקלי, אַ סכעמע אן אנדער Functional פּראָגראַממינג שפּראַך, מער אָדער ווייניקער. סטיווען קרעווסאָן: די בונד-אין. קאַנער האַרריס: יאָ. עס ס אַ גוט בונד-אין, איך רעכן. און עס ס געוויינט ווי אַ לערנען שפּראַך, אַקטואַללי, אַראָפּ מאַסע אַווע אין MIT. און עס ס זייער האַנטיק פֿאַר לילליפּאָנד פֿאַר פאַרשידן טעכניש סיבות. און אַזוי אויב איר ווילן צו מאַכן פּשוט טוויקס אָפענגיק אויף קאָנדיטיאָנאַלס, פֿאַר עקסאַמפּלע-- עס ס זיכער צושטאַנד פון אַ כעזשבן אַז ס באגעגנט, מאַכן אָלטעריישאַנז צו די אויסלייג אָדער ווהאַטנאָט-- דעמאָלט יענע פאַסיליטיעס זענען דאָרט. זיי ניטאָ קאָמפּליצירט. אַזוי דאָ ס אַ שיין פּשוט קאָד מוסטער. עס ס פינף שורות. באַסיקאַללי, איך בין דעפינינג צוויי סטאַפפס. עס ס אין 3/4. דער ערשטער שטעקן האט אַ אַטאַטשט טעמפּאָ מארק, אָבער אַז ס אַקשלי געגאנגען צו גיין אויף צו דער גאנצער כעזשבן, ווייַל טעמפּאָ מאַרקס זענען אויף די כעזשבן מדרגה. די מעטראָנאָמע צייכן ענגראַווער איז אַטאַטשט צו כעזשבן קאָנטעקסט. עס זענען פאַרשידענע קיז, ווייַל די [ינאָדאַבאַל] ענגראַווער איז אַטאַטשט די סטאַפפס. איר קענען טאקע טאָן איז. דער מוסטער איך געשריבן איז טאקע אין C הויפּט, אָבער עס ס נאָר צו באַווייַזן איר קענען האָבן פאַרשידענע שליסלען אין פאַרשידענע סטאַפפס. און די גרונט סינטאַקס איז איר שרייַבן טאָן נעמען מיט E, F, ג, וועלכער. אויב איר ווילן צו טאָן אַקסידענטאַלס, איר סופפיקס איז אָדער עס. דאס איז פון האָלענדיש מוסיקאָלאָגיקאַל קאַנווענשאַנז. און צו טאָן אָקטאַוו ליפּס, איר האָבן צו נוצן די טיקען מאַרקס, קאָמע אָדער אַפּאָסטראָפע. די קאָרעוו פּונקט מיטל וועלכער איר האָבן אַ טאָן, עס וועט אויטאָמאַטיש ווערן פּלאַעק אין די אָקטאַוו קלאָוסאַסט צו די פֿריִערדיקע איינער. און אויב איר ווילן צו שפּרינגען מער ווי אַ פיפטה-- זאָגן 1/5 אָדער מאָרע-- דעמאָלט איר האָבן צו נוצן די [ינאָדאַבאַל]. אבער אַנדערש, איר טאָן ניט האָבן צו ספּעציפיצירן די אָקטאַוו פון יעדער איין טאָן. און קאָרעוו C, הויפּט, און C, איר נאָר ספּעציפיצירן מיטל C און געמיין C, ספּעציעל ערשטער הערות. דעמאָלט איר האָבן די סטאַפפס אַז אָרגאַניזירן די צוויי קולות אָדער סאַמפּאַלז פון מוזיק, און איר האָבן אַ כעזשבן. און וואָס קוקט ווי דעם. אויב איר ווילן צו נעמען די צייַט צו קאָפּיע אַז מוסטער פון לילליפּאָנד קאָד אויף די פרייַערדיק גליטש אַראָפּ דאָ, און איר קענען שרייַבן עס פֿאַר לילליפּאָנד זיך. איך וויסן מיר ווע גאַט עפּעס אַז קוקט אַ פּלאַץ ווי דעם. אַזוי עס ס אנדערן טעכנאָלאָגיע גערופֿן מוזיק קסמל מיינטיינד דורך גאָר אַנדערש מענטשן. קסמל איז אַ טעקסטשאַוואַל דאַטע סטרוקטורע-- איך זאָל ניט זאָגן דאַטע סטרוקטורע-- זאָגן מעטאַפאָר מאַפּע סאָרט פון. און עס ס דיזיינד צו האַלטן כייראַרקאַקאַל דאַטע זייער געזונט. HTML, למשל, איז אַ טיפּ פון קסמל. און איר קענען זאָגן קסמל ווייַל זיי האט אַלע די ווינקל בראַקאַץ און ווינקל קאַנטיקער צעהאַקן מאַרקס אַז ווייַזן דאַטע fields. איך טאָן ניט האָבן אַ קאָד לעמאָשל פון מוזיק קסמל. איר קענען געפֿינען עס זיך. באַסיקאַללי, די סיבה איר זאל וועלן צו נוצן קסמל ווי די ינטערמידייט בינע איז, ערשטער פון אַלע, עס ס אַ ויסבייַט פֿאָרמאַט פֿאַר בייסיקלי עווערי-- איך זאָל ניט זאָגן יעדער, אָבער אַ פּלאַץ פון פאַרשידענע כעזשבן שרייבערס. אַזוי אויב איר שרייַבן אין מוזיק קסמל, ניט נאָר קענען לילליפּאָנד לייענען עס מיט די הילף פון דעם אַוקסילאַרי פּראָגראַם געהייסן מוזיק קסמל צו לי, אָבער אויך לעצט קענען לייענען עס, סיבעליוס קענען לייענען עס. דעפּענדינג אויף ווי אייער ינערלעך כייפעץ כייעראַרקי אַרבעט פֿאַר רעפּריזענטינג מוזיק, עס זאל זיין גרינגער צו שרייַבן אויס צו מוזיק קסמל ווי צו לילליפּאָנד און פּונקט פאַרלאָזנ זיך מוזיק קסמל צו לי צו טאָן די קאַנווערזשאַן. איך טאָן ניט טראַכטן [ינאָדאַבאַל] האט מוזיק קסמל. סטיווען קרעווסאָן: עס טוט נישט. עמעצער איז ארבעטן אויף עס, כאָטש. קאַנער האַרריס: גוט. עוטערפּעאַ טוט נישט האָבן אַ מוזיק קסמל רעזולטאַט פֿונקציע נאָך. אויב איר ווילן אַ לעצט פּרויעקט געדאַנק, אפֿשר באַקומען אין פאַרבינדן מיט גייז אַז סטיווען ווייסט, און זיי קען נוצן דיין הילף. סטיווען קרעווסאָן: איך וואָלט ליבע אַז. קאַנער האַרריס: אויך, בייסיקלי, יעדער פּראָגראַממינג שפּראַכן אַז ס 'ווערט זייַן זאַלץ שוין האט אַ קסמל ביבליאָטעק, אַזוי איר קענען ינעווייניק גער אַלע פון דיין מוזיק אין עטלעכע כייפעץ וואָס די קסמל ביבליאָטעק קענען שרייַבן אויס אַז וואָלט דאַרפן ווייניקערע אָלטעריישאַנז צו אייער ינערלעך ביניען פֿאַר וועלכער מוזיק אַבדזשעקס איר ווילן צו שרייַבן ווי שרייבט עס גלייַך אין לילליפּאָנד וואָלט. דעמאָלט נאָר דרוקן עס אויס מיט קסמל מיט די קסמל ליבראַריעס אין דיין שפּראַך, וואָס וועט גאַראַנטירן אַז עס ס סינטאַקטיקאַללי ריכטיק און אַלץ, און דעמאָלט גער עס צו לילליפּאָנד. אַזוי טעכנאָלאָגיע איר זאל וועלן צו קוקן אין אויב איר ניטאָ טאן עפּעס ווי דעם. [ינאָדאַבאַל], אן אנדער אַוקסילאַררי טעכנאָלאָגיע. דעם איז בייסיקלי טעק וואָרקס אָדער טעק סטודיאָ פֿאַר לילליפּאָנד. אזוי עס Offers העלפן מיט סינטאַקס, מיט טעמפּלאַטעס פֿאַר פאַרשידן פּראָסט קאַמבאַניישאַנז פון ינסטראַמאַנץ. עס אַלאַוז שפּאַלטן פאַרשטעלן וויוינג אַזוי איר קענען האָבן דיין קאָד אין איין פֿענצטער און פּדף אין אנדערן פֿענצטער און דריקט אויף ערטער אין די פּדף צו שפּרינגען צו די באַטייַטיק ספּאַץ אין אייער מקור קאָד. דאס איז מער נוצלעך אויב איר ניטאָ אַקטשאַוואַלי שרייבט לילליפּאָנד טעקעס זיך ווי אויב איר 'רע דזשענערייטינג זיי פּראָגראַממאַטיקאַללי. אבער ווידער, עס ס עפּעס נוצלעך צו האָבן. גרויס. אן אנדער רעסאָורסעס-- איך וועט נאָר גיין דורך דעם זייער געשווינד. לילליפּאָנד מאַנואַלס-- לילליפּאָנד האט ויסגעצייכנט דאַקיומענטיישאַן אויף זייַן וועבזייַטל. זיי האָבן אַ טוטאָריאַל. זיי האָבן אַ סינטאַקס דערמאָנען. זיי האָבן הונדערטער פון סניפּאַץ פֿאַר פאַרשידן קליין זאכן יאָ זאל דאַרפֿן טאָן צו באַווייַזן פאַרשידן קייפּאַבילאַטיז. אויב איר ווילן צו נוצן די סקריפּטינג שפּראַך אָדער מאַכן מער ברייט קוסטאָמיזאַטיאָנס, דעמאָלט דאָרט ס ינטערנאַלס דערמאָנען אין אַז URL. אויב איר ווילן צו נוצן מוזיק קסמל, עס ס אַז URL, musicxml.com/tutorial. און דעריבער אויב איר דאַרפֿן צו לערנען סכעמע ווייַל איר אַקטשאַוואַלי ווילן צו נוצן די סקריפּטינג פאַסיליטיעס אין לילליפּאָנד, דעמאָלט דאָרט ס אַ [ינאָדאַבאַל] גערופֿן סטרוקטורעד ינטערפּרעטאַטיאָן פון קאָמפּיוטער מגילה, וואָס איז ניט בלויז די רגע גרעסטע קס לערנבוך אלץ ווריטטענ-- געפינען מיר דערנאָכדעם אויב איר ווילן צו וויסן וואָס איך טראַכטן די גרעסטע איין יס-- אָבער עס ס אויך אַ זייער גוט הקדמה צו די שפּראַך געהעריק. איר וועט ניט דאַרפֿן מער ווי דער ערשטער ווייניק סעקשאַנז. און אַז ס עס. קיין שאלות? תּלמיד: ווו קען איך אָפּלאָדירן דיין דזשענערייטאַד פרערע דזשאַק אַזוי איך קענען לייגן עס אויף מיין יפּאָד? סטיווען קרעווסאָן: נו, איר קענען שרייַבן אויס צו עטלעכע וואַוו טעקע אין עוטערפּעאַ. און איר האָבן די קאָד. עס ס אויף גיטהוב. מאַכט אייער אייגן ווערייישאַנז פון פרערע דזשאַק דורך קס50 כייוו מיינונג. עס וואָלט זיין גרויס. קאַנער האַרריס: ווער עס יז אַנדערש? סטיווען קרעווסאָן: מיר דאַרפֿן אַ בעסער באַס פּויק, אויך. עס ס טאַקע שלעכט. תּלמיד: עוטערפּעאַ האט ניט בלויז דער זאַץ זייַט, אָבער סיגנאַל-- סטיווען קרעווסאָן: יא. אין פאַקט, די אַרבעט איך האט אין עוטערפּעאַ ווען איך גענומען טהיס-- עס ס אַ גראַדזשאַוואַט קורס בייַ יאַלע אַז ניצט יט-- געווען אויף סאָונד סינטהעסיס. אַזוי עס ס אַ טאַקע פייַן וועג ניצן אַראָוז און עטלעכע פון ​​די נאָוטיישאַן מיר געזען פון קאַמפּאָוזינג צוזאַמען סיגנאַל פֿעיִקייטן. אין באַזונדער, די באַס פֿאַר רובֿ פון זיי איז נאָר אַ פּשוט סינוס כוואַליע. אבער אויב איר אָנהייבן קאַמפּאָוזינג די אין טשודנע פּראַגראַמאַטיק וועגן, איר קענען באַקומען משוגע געזונט ווירקונג, ווי טשודנע קאַסקיידז. איר קענען מאַכן זייער גריטי סאָונדס מיט אַ פּלאַץ פון מאַדזשאַליישאַן. איך האט אַ פּרויעקט אויף גראַניאַלער סינטעז, וואָס איז ערגעץ אין צווישן FM און מוסטערונג. איר נעמען זייער קליין, ביסל סאַמפּאַלז, און דעמאָלט פאַרבינדן זיי מיט עטלעכע סאָרט פון מאַדזשאַלייטער און בויען אַרויף אַ ריטשער געזונט. מיר אויך האט גשמיות מאָדעלינג, אַזוי טריינג צו טראַכטן וועגן די פיזיק און פּסיטשאָאַקאָוסטיקס פון עפּעס ווי אַ שופֿר, און טראכטן וועגן דעם וועג דער געזונט איז באַונסינג אַוועק די גלעקל פֿון שופֿר און די אַקוסטיקס פון די צימער און מאָדעלינג אַז מיט די גרונט אַסאַלייטערז. קאַנער האַרריס: דאַנק אַזוי פיל. דאַנק פֿאַר קומען. און איך בין שטענדיק גרייט צו נעמען שאלות דורך עמאַיל-- connorharris@college.harvard.edu. סטיווען קרעווסאָן: יאָ. stephen.krewson@yale.edu. קיל.