freepeople性欧美熟妇, 色戒完整版无删减158分钟hd, 无码精品国产vα在线观看DVD, 丰满少妇伦精品无码专区在线观看,艾栗栗与纹身男宾馆3p50分钟,国产AV片在线观看,黑人与美女高潮,18岁女RAPPERDISSSUBS,国产手机在机看影片

正文內(nèi)容

函數(shù)式編程之clojure(v102)-文庫吧資料

2024-10-07 13:25本頁面
  

【正文】 show [v] `(str 39。= ([name ―ClojureCN‖] 。name ClojureCN] (println ~39。= (do (def x 1) (def y 2)) 再探 Clojure ? Macro語法 (2) 語法 說明 示例 ~‘ 在語法引用( `)范圍內(nèi),對本地綁定名進行直譯。= ([1]) ~ 反語法引用拼接,在語法引用( `)范圍內(nèi),對多個子表達式進行反語法應(yīng)用。= (A) ~ 反語法引用,用在語法引用( `)范圍內(nèi),作用是標(biāo)識其中不需要延遲評估的子表達式。 再探 Clojure ? Macro語法 (1) 語法 說明 示例 ` 語法引用,用于在宏中引用表達式,作用是延遲表達式的評估。 。 Clojure的宏能夠讓使用者定義他們想要的計算操作集合,并使其能夠像語言內(nèi)建計算操作那樣去被使用。 new ? 所有的與 Java的互操作功能 ——實例化、靜態(tài)和實例方法調(diào)用和字段訪問 ——都由 “ .”和“ new”這兩個 special form來提供。=1 (defn countdown [x v] (if (zero? x) (conj v :blastoff!) (do (recur (dec x) (conj v x))))) (countdown 3 []) 。 recur ? recur可以在不消耗堆??臻g的情況下將控制轉(zhuǎn)回循環(huán)的起始位置,這里的起始位置是指 loop或函數(shù)的定義位置。= bound foo 。= 10 。 binding (4) ? binding是一個宏,它可以將外部命名與新值綁定,這個新綁定的影響范圍為同一線程之內(nèi)的從此 binding調(diào)用開始的調(diào)用鏈。= 16 。= 0 。= 11 。= nil 再探 Clojure ? let amp。= (foo [5 12]) 。= 。 (def val [42 foo [5 12]]) (do (let [[x y z] val] (println (+ x z))) (let [[x _ _ [y z]] val] (println (+ x y z))) (let [[x amp。 binding (2) ? let是解構(gòu)集合的工具。 (defn hypot [x y] (let [x2 (* x x) y2 (* y y)] (Math/sqrt (+ x2 y2)))) (hypot 2 3) 。= 20 再探 Clojure ? let amp。(+ x x)) 。(+ x x)) 。(+ x x) 。x。eval函數(shù)會立即評估參數(shù) form。被 quote修飾的 form都會被延遲評估。= nil 再探 Clojure 現(xiàn)在,讓我們討論得更深入一些 … 再探 Clojure ? quote amp。 (defn timestampedlogger [logger] (logger (format [%1$tY%1$tm%1$te %1$tH:%1$tM:%1$tS] %2$s (.) %))) ((timestampedlogger (multilogger (printlogger *out*) (filelogger ))) Hello, timestamped logger~) 。 timestampedlogger函數(shù)實現(xiàn)了它。= hello again 。 : “ hello again” (defn multilogger [amp。 (defn filelogger [file] (withopen [f (:append true)] ((printlogger f) %))) ((filelogger ) hello, log file.) 。= nil Clojure與函數(shù)式編程 ? 更自然的使用“組合”來解耦代碼( 2) filelogger函數(shù)調(diào)用 printlogger函數(shù)把日志記錄到指定文件中。 (defn printlogger [writer] (binding [*out* writer] (println %))) ((printlogger *out*) hello) 。= nil Clojure與函數(shù)式編程 ? 更自然的使用“組合”來解耦代碼( 1) (一個“遞進編寫”的日志記錄程序) printlogger函數(shù)把日志打印到屏幕上。= nil Clojure與函數(shù)式編程 ? 要親自管理可變狀態(tài)?敬而遠(yuǎn)之吧 (一個簡單的計數(shù)程序) 這里的可變狀態(tài)是并發(fā)安全的!所有的可變狀態(tài)也都會是! (def counter (let [tick (atom 0)] (swap! tick inc))) (println (take 10 (repeatedly counter))) 。其他細(xì)節(jié)?都交給Clojure去做吧! (println (for [n (range 1 101) :when (= 0 (rem n 3))] n)) 。= 200 。 use closure (plus5 3) 。 The original function of closure (defn plusn [x] (fn [y] (+ x y))) 。= nil Clojure與函數(shù)式編程 ? 函數(shù)式編程 – 閉包 ? 閉包這個詞源自于通過“捕獲”自由變量的綁定對函數(shù)文本執(zhí)行的“關(guān)閉”行動。= nil (defn lazyseqfibo ([] (concat [0 1] (lazyseqfibo 0 1))) ([a b] (let [n (+ a b)] (lazyseq (cons n (lazyseqfibo b n)))))) (println (take 10 (lazyseqfibo))) 。= nil Clojure與函數(shù)式編程 ? 函數(shù)式編程 – 懶惰計算 (println (take 10 (iterate inc 1))) 。= nil (defn funca [s] (str Func A: s)) (defn funcb [s] (str Func B: s)) (defn myfunc2 [n] (cond ( n 0) funca :else funcb)) (println ((myfunc2 0) myfirstclass)) 。= It39。= nil Clojure與函數(shù)式編程 ? 函數(shù)式編程 函數(shù)是一級類型 (defn myfunc1 [d f] (f d)) (myfunc1 It39。= b is {:a 5, :c 0, :b 6, :d 8} 。= nil Clojure與函數(shù)式編程 ? 函數(shù)式編程 不可變的數(shù)據(jù) (def a {:a 5, :b 6, :c 7, :d 8}) (def b (assoc a :c 0)) (def c (dissoc a :d)) (do (println a is a) (println b is b) (println c is c)) 。= a is (1 2 3) 。= 120 Clojure與函數(shù)式編程 Clojure is a functional programming language. Clojure與函數(shù)式編程 ? 函數(shù)式編程( Functional programming) ? 一種編程范式 ? 程序運算即為數(shù)學(xué)上的函數(shù)計算 ? 以 λ 演算( lambda calculus)為基礎(chǔ) ? 函數(shù)為 firstclass,可以很方便的運用閉包創(chuàng)造出高階函數(shù) ? 避免狀態(tài)、變量和副作用,保證引用透明性 ? 懶惰計算( lazy evaluation)和閉包( closure) Clojure與函數(shù)式編程 ? 函數(shù)式編程 不可變的數(shù)據(jù) (def a 39。(1 2 3))) 。 這就是 Clojure ? Clojure代碼 ? special form: (let [n 10] (if ( n 0) (cons 4 39。它是 Clojure中最基本的計算操作,是構(gòu)建其他Clojure代碼的基礎(chǔ) 。= {language 1, programming 1, dynamic 1, a 2,
點擊復(fù)制文檔內(nèi)容
教學(xué)課件相關(guān)推薦
文庫吧 www.dybbs8.com
備案圖鄂ICP備17016276號-1