亚洲免费av电影一区二区三区,日韩爱爱视频,51精品视频一区二区三区,91视频爱爱,日韩欧美在线播放视频,中文字幕少妇AV,亚洲电影中文字幕,久久久久亚洲av成人网址,久久综合视频网站,国产在线不卡免费播放

        ?

        F#函數(shù)式編程教學方法研究

        2019-12-04 01:47:08艾均蘇湛
        軟件導(dǎo)刊 2019年10期
        關(guān)鍵詞:教學特點

        艾均 蘇湛

        摘要:函數(shù)式編程語言及函數(shù)特性在工業(yè)界逐漸流行,函數(shù)式編程語言教學具有重要的理論與現(xiàn)實意義。以提高教學質(zhì)量為目的,通過仔細分析默認不可變、高階函數(shù)、模式匹配、數(shù)據(jù)與函數(shù)解耦等編程語言特征,采用討論對比與實踐方法,研究函數(shù)式編程語言教學方法,對學生編程思維進行訓(xùn)練,并對未來編程技術(shù)發(fā)展趨勢進行分析。采用實例編程教學與不同語言對比相結(jié)合的方法,使《函數(shù)式編程語言》教學質(zhì)量得到有效提升。

        關(guān)鍵詞:F#;函數(shù)式編程;編程實踐;教學特點;教學內(nèi)容組織

        DOI:10.11907/ejdk.191325開放科學(資源服務(wù))標識碼(OSID):

        中圖分類號:G433文獻標識碼:A 文章編號:1672-7800(2019)010-0201-03

        0引言

        函數(shù)式編程范式,解耦了數(shù)據(jù)和處理數(shù)據(jù)的函數(shù),將數(shù)據(jù)在不同處理函數(shù)之間的流動過程展現(xiàn)給用戶,使用戶能夠?qū)ψ约旱臉I(yè)務(wù)邏輯始終保持專注,避免了命令式編程不斷向計算機描述如何完成某項工作的瑣碎步驟,也避免了面向?qū)ο蟪橄筮^程中數(shù)據(jù)和方法的耦合以及類繼承的復(fù)雜性。函數(shù)式編程與命令式編程范式相比,具有數(shù)學上的優(yōu)雅性。因為計算機編程過程處理的對象是數(shù)據(jù),函數(shù)才是處理不同有組織數(shù)據(jù)的核心。在初步掌握數(shù)據(jù)結(jié)構(gòu)后,學生可通過函數(shù)式編程語言了解利用計算機解決計算問題的思想,進而將這種思想應(yīng)用于計算機編程實踐。

        F#是微軟.NET開發(fā)平臺的一門編程語言,由微軟倫敦研究院研發(fā),目前是全平臺的開源編程語言,技術(shù)演進完全由社區(qū)驅(qū)動,其最鮮明的特點是對函數(shù)式編程范式(FP,F(xiàn)unctionalProgramming)的引入,同時F#對面向?qū)ο螅∣OP)編程的支持也同樣出色。使用F#語言,開發(fā)人員可以自由選擇函數(shù)式編程或面向?qū)ο缶幊虒崿F(xiàn)目標。此外,F(xiàn)#還可與NET平臺上的C#、VB等編程語言緊密結(jié)合,通過相互調(diào)用完成歷史代碼復(fù)用,實現(xiàn)更大規(guī)模的項目。

        函數(shù)式編程思想與傳統(tǒng)的C語言、較新的Python、Go語言不同,具有一定新穎性,帶來解決問題的新思路,尤其是對于并行與異步編程,相比Java等編程語言,更加利于學生理解問題的關(guān)鍵和核心。近年函數(shù)式編程語言在工業(yè)界流行,在大學開設(shè)相關(guān)課程是教改關(guān)注的熱門話題。這種范式的編程語言與大眾熟知的面向?qū)ο?、命令式編程語言不同,為編程人員提供了新的問題解決思路與思維工具。盡管這種編程語言在工業(yè)界和學術(shù)圈流行,但尚未在國內(nèi)高校編程教學中得到重視。

        本文從函數(shù)式編程的新視角出發(fā),研究了函數(shù)式編程特點,用不同的方式解決傳統(tǒng)軟件開發(fā)的諸多問題。啟發(fā)學生思維,為解決老問題提供新思路。

        1默認不可變

        函數(shù)式編程語言強調(diào)量默認的不可變性,如C語言中,入門時一定會告訴學生需要定義一個整形變量sum,初始值為0,當對1-100的整形數(shù)求和時,可以不斷將1-100中的數(shù)字i加到sum中,改變sum變量的值為舊的sum加上新的i,這樣可以求得最終的和值。在這個過程中,編程者向計算機仔細描述了實現(xiàn)一個數(shù)列求和功能的函數(shù)。

        而在函數(shù)式編程中,因為量默認是不可變的,就不能進行累計的求和累加行為,需要換一種思路。從代碼1可以看到,1~4行構(gòu)造了一個遞歸函數(shù),這個遞歸函數(shù)有兩個輸入:第一個輸入data是一個要求和的list,第二個輸入是用來求和的sum。接下來的match with關(guān)鍵字是現(xiàn)代編程語言,諸如Scala、Swift等編程語言,都有類似的語法特征(如用Switch實現(xiàn)這一功能)??梢钥吹健?”豎線部分代表一種需要被匹配的情況,如果匹配成功,則執(zhí)行箭頭指向的語句塊。匹配規(guī)則是如果data的list由一個頭元素head和若干尾元素tail(這里的tail是一個去掉data頭元素的list)組成,那么函數(shù)會將頭元素加到sum上,得到新的sum,并對tail尾進行上述操作,不同的是輸入給getSum函數(shù)的sun值已經(jīng)變成在原來的sum值上加了head值。在第5行中,當data的list為空時,可以看到getSum函數(shù)會將sum輸入的結(jié)果直接返回給用戶。在代碼1第6行中,可以看到一個求1到100的和的例子,data輸入對應(yīng)[1…100],代表一個從1到100,步長為1的list,sum輸入一個整形0作為和的初始值。

        代碼1:基于函數(shù)式編程語言的不可變、模式匹配特性進行求和。

        從這段代碼可以看出,編程人員在實現(xiàn)過程中沒有用到任何可變變量,一切值在所有行里都是不可變的,這保證了當代碼在多核或多線程中運行時沒有任何副作用,是純粹(pure)的。

        量默認不可變優(yōu)勢非常明顯,任何一段代碼拿到一個量都可以放心使用這個量,不必擔心代碼在其它線程或內(nèi)核中改變這個值,這在機制上克服了副作用,避免了加鎖等一系列繁瑣操作。

        2高階函數(shù)與聲明式編程

        分析例證1:求一個list的和,可以給一個初始值,將list中每個頭元素不斷遞歸與初始值求和,并作為新的初始值送人下一次遞歸,直到list為空,即可求得整個list的和值,這其實就是MAP/REDUCE計算模型中的REDUCE過程。

        代碼2:描述做什么(WHAT),而不是訴說怎么做(WHAT)。

        分析例證2:通過一個計算實例向?qū)W生展現(xiàn)函數(shù)編程語言的優(yōu)雅與簡潔。當存在一個list,從1到100,要求對其中的每一個元素做某種運算f生成一組新的元素,再對其中符合某種條件t的元素進行保留,最后對剩余元素求和。

        通過提問方式討論傳統(tǒng)編程語言解決這一問題的方法。通常發(fā)現(xiàn)需要對list元素進行遍歷,計算遍歷元素i在廠函數(shù)作用下的結(jié)果f(i),然后判斷f(i)是否符合條件t。如符合,將其值加入一個累計變量sum中作為最終的和;如不符合t則不進行任何操作。而在F#代碼2中可以看出,第1行構(gòu)造目標數(shù)據(jù),第2行對數(shù)據(jù)中每一個元素進行操作(將每個元素平方,然后加1),第3行對新生成數(shù)據(jù)進行過濾,保留其中可以被2整除的元素,第4行對結(jié)果進行求和。第2行和第3行中,直接將一個需要進行的操作和判斷的條件放在map函數(shù)及filter函數(shù)后面,對需要進行操作或過濾的數(shù)據(jù)進行操作或過濾,這樣可以接受一個作為輸入的函數(shù),叫做高階函數(shù)。學生在學習到這一特性時,普遍會覺得函數(shù)式編程的語法更容易理解,同時看起來很優(yōu)雅。

        有了高階函數(shù),函數(shù)式編程賦予編程者組合拼接各種功能函數(shù)的能力,從而通過若干小的功能就可構(gòu)造出更大更多功能。而高階函數(shù)直接避免了指針(或代理)的使用,可以將函數(shù)很輕松地作為像量一樣的東西傳遞,這種將函數(shù)和量保持在同等地位的特性也是函數(shù)式編程獨有的。

        3并行計算與異步計算

        隨著單純提高CPU頻率滿足摩爾定律的終結(jié),中央處理器的核心數(shù)量越來越多,并行并發(fā)計算在各種編程語言中都是學習難點。而F#的語法設(shè)計在學習并行與異步計算課程中異常簡單。示例代碼如代碼3、代碼4所示。

        代碼3:數(shù)組同步并行計算代碼示例。

        代碼3與代碼2的運算完全一致,不同的是代碼2的計算由單個CPU核心完成,代碼3則會使用CPU所有的邏輯核心和實體核心。仔細比較兩段代碼,可發(fā)現(xiàn)它們高度類似,只是list換成了array及額外增加了一個parallel。之所以將list換成array,是因為list對模式匹配的支持更豐富,但array通過下屬parallel模塊支持同步并行計算。如示例所示,當對一個集合中每個元素作某種變換(用一個函數(shù)處理元素)時,可以直接使用并行計算,這樣F#編程中的同步并行計算就可輕易達成。講授到這里時,學生會感嘆函數(shù)式編程的易用性。但還需補充講解list和array數(shù)據(jù)類型的特點和區(qū)別,避免學生在學習中混淆。

        代碼4:數(shù)組異步并行計算代碼示例。

        同步并行問題在于當計算量較大時,CPU因所有核心都在執(zhí)行目標操作,無暇顧及其它系統(tǒng)請求,會給用戶造成卡頓的感覺。當希望CPU進行計算的同時還可響應(yīng)必要的系統(tǒng)請求,就需要異步并行計算。還是同樣的計算任務(wù),代碼4展示了在F#中使用async關(guān)鍵字構(gòu)造一個異步計算并完成的過程。

        第3到第5行的代碼將原本要進行的計算包裹在一個結(jié)構(gòu)async{return something}中,代表一個要進行的異步計算,something是這個異步要返回的結(jié)果。構(gòu)造完這個異步計算,第2到第6行就將1~100的100個元素映射成了100個異步計算,第7行的Async.Parallel用fork-join模式,將100個異步計算合并成一個異步計算,在第8行代碼的執(zhí)行命令下,返回這個異步計算結(jié)果(注意這時結(jié)果是一個數(shù)據(jù)Array)。

        講授該知識點時,可請學生在課堂上討論各種編程語言是如何實現(xiàn)異步編程的。在向大家介紹F#的異步實現(xiàn)方式后,通過對比,學生會發(fā)現(xiàn)F#不需要構(gòu)造線程、設(shè)計Runnable類對象、聲明回調(diào)函數(shù)等瑣碎細節(jié)就可直接構(gòu)造一個異步運算,并可執(zhí)行和獲得結(jié)果。

        4結(jié)語

        治學當知行合一(王守仁),學習計算機相關(guān)知識尤其需要學生動手實踐。當學生面對并行、異步、高階函數(shù)、默認不可變時,這些概念對他們來說是陌生的。通過代碼示例、課堂討論、動手實踐,學生能掌握函數(shù)式編程的核心概念和解決問題的一般思路。聲明式編程將編程人員的焦點從告訴計算機如何做轉(zhuǎn)移到告訴計算機做什么上。計算機編程已經(jīng)到了一個需要進一步向前演化的時間節(jié)點,Scala、F#等函數(shù)式編程語言和函數(shù)式語法已在工業(yè)界逐步流行,這要求學校具有前瞻性,為學生儲備相關(guān)知識和基礎(chǔ)技能。

        通過學習《F#函數(shù)式編程》課程,學生可理解面向?qū)ο缶幊讨獾牧硪环N編程思想,為其將來工作中解決生產(chǎn)實踐問題提供新的思維工具。通過不斷探索不同知識點的教學方法,學生更容易理解一些全新概念,豐富知識儲備和思維方式,對培養(yǎng)新時代的計算機專業(yè)人才具有重要意義,計算機編程教學質(zhì)量也將得到進一步提升。

        猜你喜歡
        教學特點
        陜南地區(qū)高校公共體育足球教學改革探索
        探究高校英語類課程教學特點及慕課的設(shè)計理念
        淺談小學英語教學的特點與方法
        卷宗(2016年10期)2017-01-21 11:59:26
        談俄羅斯聲樂學派的教學特點
        論如何通過抓小學音樂教學特點提高教學水平
        提高高校聲樂教學形式與方法探析
        “翻轉(zhuǎn)課堂”與中國課堂教學
        科技視界(2016年25期)2016-11-25 20:47:52
        小學英語教學
        考試周刊(2016年49期)2016-07-05 17:17:23
        探究應(yīng)如何提升小學體育教學水平
        探究成人鋼琴教學與非專業(yè)性成人鋼琴教學的特點
        戲劇之家(2016年1期)2016-02-25 14:12:16
        a国产一区二区免费入口| 中文字幕精品久久久久人妻| 丝袜美腿亚洲综合久久| 在线综合亚洲欧洲综合网站| 亚洲av中文无码字幕色三| 欧美伊人网| 香蕉亚洲欧洲在线一区| 青青草在线成人免费视频| 国产亚洲一本二本三道| 成年美女黄网站色大免费视频| 国产色在线 | 日韩| 午夜成人理论无码电影在线播放| 国产精品jizz观看| 精品国产91久久久久久久a| 亚洲成av人片在久久性色av| 亚洲免费女女在线视频网站| 狠狠摸狠狠澡| 亚洲熟妇无码八av在线播放| 狠狠噜天天噜日日噜| 国产一级淫片a免费播放口 | 少妇久久高潮不断免费视频| 精品久久一区二区三区av制服| 日本久久伊人特级黄色| 777国产偷窥盗摄精品品在线| 夜夜嗨av一区二区三区| 亚洲男人的天堂精品一区二区| 中文字幕精品永久在线| 国产精品成人一区二区在线不卡| 综合色就爱涩涩涩综合婷婷| 老熟女高潮一区二区三区| 97色噜噜| 亚洲天堂av社区久久| 亚洲中文字幕高清av| 亚洲熟妇无码av在线播放| 亚洲一线二线三线写真| 免费一区啪啪视频| 视频一区中文字幕日韩| 日本一区二区三区视频在线观看 | 亚洲国产日韩精品综合| 国产性感午夜天堂av| 99国产精品自在自在久久|