寫!

F# 學習筆記 7 介面

// 型別: 介面
// ---------------------------------------------------------------
 
type IPeekPoke = 
    abstract Peek: unit -> int
    abstract Poke: int -> unit
 
// 型別: 含介面實作的類別
// ---------------------------------------------------------------
 
/// 計算自身被查詢次數的 Widget
type Widget(initialState:int) = 
    /// Widget 的內部狀態
    let mutable state = initialState
 
    // 實作 IPeekPoke 介面
    interface IPeekPoke with 
        member x.Poke(n) = state <- state + n
        member x.Peek() = state 
        
    /// Widget 被查詢過嗎?
    member x.HasBeenPoked = (state <> 0)
 
 
let widget = Widget(12) :> IPeekPoke
 
widget.Poke(4)
let peekResult = widget.Peek()
 
// 列印
// ---------------------------------------------------------------
 
// 列印整數
printfn "peekResult = %d" peekResult 
 
// 使用 %A 列印結果以進行一般列印
printfn "listC = %A" listC


這是最後一份筆記了&nbsp;
新關鍵字是abstract,mutable 還有&lt;-&nbsp;
十分難以理解的東西, 先從介面定義開始說起&nbsp;
abstract Peek: 是輸入unit 而輸出int,&nbsp;
unit 是一個特別的值, 這在functional 語言中十分常見, 要說定義的話, 就是它只有一個叫() 或者叫null 的值那就是說是不用輸入 Poke 則是相反, 輸入int 而不作出回應 &nbsp;




實作時: 把initialState 放進去, mutable 是F#的關鍵字, 用途是令state 可以裡重新assign (發現以前的都不可以了吧@@ 就是如果mutable 不放進去的話, 是沒法像其他語言那樣a=1 然後a=2 的, 說起來functional 語言很像算式, 但這樣想的話它就不能用來推動任何東西了, 我也就在吐嘈)&nbsp;




interface IPeekPoke with &nbsp;member ....member 只可以是在abstract 中提過的成員&nbsp;




Poke 會輸入n 然後state 變為state+n Peek 是回傳state &nbsp;
:&gt; 用法是 class(params) :&gt; interface, interface 是強制的, 像是宣告型態一樣, 就當給自己提示吧
發表時間:2013年3月6日 | 評論 (0) | 全文

F# 學習筆記 6 記錄和類別

// 型別: 記錄
// ---------------------------------------------------------------
type Card = { Name  : string;
              Phone : string;
              Ok    : bool }              
let cardA = { Name = "Alf" ;
 Phone = "(206) 555-0157" ;
 Ok = false }
let cardB = { cardA with Phone = "(206) 555-0112"; Ok = true }
let ShowCard c =   c.Name + " Phone: " + c.Phone + (if not c.Ok then " (unchecked)" else "")
// 型別: 類別
// ---------------------------------------------------------------/
// 二維向量
type Vector2D(dx:float, dy:float) =     // 向量預先計算的長度    
let length = sqrt(dx*dx + dy*dy)    /// 在 X 軸上的位移    
member v.DX = dx    /// 在 Y 軸上的位移    
member v.DY = dy    /// 向量的長度    
member v.Length = length    // 依照一個常數重新調整向量    
member v.Scale(k) = Vector2D(k*dx, k*dy)

記錄和類別就是型別之一 到現時為止, F# 的型別有等位,記錄和類別, 之後還會說最後的一個:介面

這個Card 是一個自定義的type 然後cardA

因為Name, Phone, Ok, 都配對到Card 裡, 所以就成為了Card 下面那個就是Class 的意思; 除了參數, 也有方法

發表時間:2013年3月11日 | 評論 (0) | 全文

F# 學習筆記 5 等位和記錄

// 型別: 等位
// ---------------------------------------------------------------
type Expr =   
| Num of int  
| Add of Expr * Expr  
| Mul of Expr * Expr  
| Var of string  

let rec Evaluate (env:Map) exp = 
    match exp with
    | Num n -> n
    | Add (x, y) -> Evaluate env x + Evaluate env y
    | Mul (x, y) -> Evaluate env x * Evaluate env y
    | Var id    -> env.[id]

let environment = Map.ofList [ "a", 1 ;
                               "b", 2 ;
                               "c", 3 ]

// Create an expression tree that represents 
// the expression: a + 2 * b. 
let expressionTree1 = Add(Variable "a", Multiply(Number 2, Variable "b"))

// Evaluate the expression a + 2 * b, given the 
// table of values for the variables. 
let result = Evaluate environment expressionTree1

有心要學好它就一口氣把各樣的語法都學會吧...

這回再說一個關鍵字: type type

和Java 的hashtable 一樣變成強型態了

等位的意思像其他語言的class, match 還是要存在

Num 像一個getter

Add Mul 就是function 了

expT1 是expression, 用來定義Evaluate 要做的事, 也像是一個參數的配對 整件事就是envA 放到expT1 再以Evaluate 計算, 得出resT1

發表時間:2013年3月11日 | 評論 (0) | 全文

F# 學習筆記 4 更多函式

// 函式
// ---------------------------------------------------------------

/// 計算輸入值之平方的函式
let Square x = x*x              

// 在值清單之間對應函式
let squares1 = List.map Square [1; 2; 3; 4]
let squares2 = List.map (fun x -> x*x) [1; 2; 3; 4]

// 管線
let squares3 = [1; 2; 3; 4] |> List.map (fun x -> x*x) 
let SumOfSquaresUpTo n = 
  [1..n] 
  |> List.map Square 
  |> List.sum

建立函式是Functional language 的最常手法所以F# 建立它的方法也同樣多姿多彩
let squares2 = List.map (fun x -> x*x) [1; 2; 3; 4]這句最能表現F# 的魅力
fun x-> x*x 是anonymous function
因為呼叫方法和shell 一樣, 所以squares2 就變所List 放到裡面去(1;4;9;16)
發表時間:2012年2月11日 | 評論 (2) | 全文

F# 學習筆記 3 陣列和Assoc

// 可變動的陣列
// ---------------------------------------------------------------

/// 建立陣列
let arr = Array.create 4 "hello"
arr.[1] <- "world"
arr.[3] <- "don"

/// 使用陣列物件的執行個體方法,計算陣列的長度
let arrLength = arr.Length        

// 使用切割標記法擷取子陣列
let front = arr.[0..2]


// 更多集合
// ---------------------------------------------------------------

/// 內含整數索引鍵和字串值的字典
let lookupTable = dict [ (1, "One"); (2, "Two") ]

let oneString = lookupTable.[1]

// 如需其他通用資料結構,請參閱:
//   System.Collections.Generic
//   Microsoft.FSharp.Collections
//   Microsoft.FSharp.Collections.Seq
//   Microsoft.FSharp.Collections.Set
//   Microsoft.FSharp.Collections.Map
唯一要說的是這句 let arr = Array.create 4 "hello"
let arr=Array.create 4 "hello" 的結果會建立["hello";"hello";"hello";"hello"]
發表時間:2013年3月11日 | 評論 (0) | 全文

F# 學習筆記 3 List

// 功能清單
// ---------------------------------------------------------------/
// 空白清單
let listA = [ ]           /// 有 3 個整數的清單
let listB = [ 1; 2; 3 ]     /// 有 3 個整數的清單,注意 :: 是指 'cons' 作業
let listC = 1 :: [2; 3]    /// 使用遞迴函式計算整數清單的總和
let rec 
SumList xs =    match xs with    | []    -> 0    | y::ys -> y + SumList ys/// 清單的總和
let listD = SumList [1; 2; 3]  /// 介於 1 到 10 (含) 之間的整數清單
let oneToTen = [1..10]/// 前 10 個整數的平方
let squaresOfOneToTen = [ for x in 0..10 -> x*x ]

List 是F# 最重要特點之一, 可以將數值快速運數及整合, 會用python 或matlab 的人會比較有認識

上面有用過一個寫法" match .. with | "

這是個foreach loop, 意思是xs 作為List 中其中的一個element,

| 是switch 式, 用作處理不同的情況

-> 是return的意味, y::ys -> y + SumList ys 意思是把y 從List 中抽取出來, 再來和餘下的List Element 加起來

發表時間:2013年3月11日 | 評論 (0) | 全文

F# 學習筆記 2 Tuple 和其他型別

// Tuple// ---------------------------------------------------------------// 簡單的整數 Tuplelet pointA = (1, 2, 3)// 簡單的整數、字串和雙精確度浮點數的 Tuplelet dataB = (1, "fred", 3.1415)/// 將 Tuple 中兩個值的順序互換的函式let Swap (a, b) = (b, a)// 布林值// ---------------------------------------------------------------/// 簡單的布林值let boolean1 = true/// 第二個簡單的布林值let boolean2 = false/// 使用 And、Or 和 Not 計算新的布林值let boolean3 = not boolean1 && (boolean2 || false)// 字串// ---------------------------------------------------------------/// 簡單的字串let stringA  = "Hello"/// 第二個簡單的字串let stringB  = "world"/// 使用字串串連計算 "Hello world"let stringC  = stringA + " " + stringB/// 使用 .NET 程式庫函式計算 "Hello world"let stringD = String.Join(" ",[| stringA; stringB |])  // 嘗試重新輸入上一行,以查看 IntelliSense 的作用  // 注意,在識別項上使用 Ctrl-J (部分) 會重新啟動該識別項Ctrl+J (很重要) Tuple 和List 都是可以儲備多個數值的變數, 但是有分別的, 但可以先當tuple 寫法是php 的non-assoc array 而list 是個整數loop , 下回再說List
發表時間:2012年2月11日 | 評論 (0) | 全文

F# 學習筆記 1 變數和函數

F# : 弱型態, 編譯型, Functional

 

// 開啟一些標準命名空間
open System

// 簡單計算
// ---------------------------------------------------------------
// 這裡是一些簡單的計算。請注意程式碼用
// '///' 加註註解的方式。將游標置於任何變數參考上方
// 就可以查看說明文件。

/// 非常簡單的常數整數
let int1 = 1

/// 第二個非常簡單的常數整數
let int2 = 2

/// 兩個整數相加
let int3 = int1 + int2

// 整數的函式
// ---------------------------------------------------------------

/// 整數的函式
let f x = 2*x*x - 5*x + 3

/// 簡單計算的結果
let result = f (int3 + 4)

/// 另一個整數的函式
let increment x = x + 1

/// 計算整數的階乘
let rec factorial n = if n=0 then 1 else n * factorial (n-1)

/// 計算兩個整數的最大公因數
let rec hcf a b =                       // 注意: 2 個參數以空格分隔
    if a=0 then b
    elif a<b then hcf a (b-a)           // 注意: 2 個引數以空格分隔
    else hcf (a-b) b
    // 注意: 函式引數通常是以空格分隔
    // 注意: 'let rec' 會定義遞迴函式
發表時間:2012年2月11日 | 評論 (0) | 全文

[lol]全坦隊伍

全坦隊伍在人們不斷嘗試之下, 已經發現它不單只是一隊Troll Team, 而是一個非常可行的組合, 尤其在成功把戰局拉到中期以後而大後期之前時, 更是有最大的威力。

全坦的打法是由3v3 開始的, 因為最大的集火火力遠低於5v5 而個人配裝則還是100%, 所以3坦的打法令人非常頭痛, 但畢竟t.t.不是正規比賽中所選用的場地, 所以留待以後有機會再作進一步說明, 現在以Summoner's Rift 作為背景開始探討。

全坦的最大好處就我看來有幾點

1. CC 技能豐富: 這是最大優勢, 幾乎所有Tank 定帶有一招, 甚至兩招的CC, 或強大的負面技能, 令到在遭遇戰時幾乎穩操勝負。

2. 對方無法協定如何集火: 無明顯的dps, 一致性的高價防裝, 令到對方攻擊效率比起打其他對伍更低。

當然這些紙上談兵更無數據的東西我也不想說太多, 人們早想到無數的疑問, 把括我在內, 那麼先從一些明顯的觀點入手。在所有的交戰前, 要組成隊伍, 之後的再詳談。

跟據官方的資料, 有10名是真正意義上的tank, http://leagueoflegends.wikia.com/wiki/List_of_champions

 Alistar Tank 90 60 50 80 2009-02-21 1350 585
 Amumu Tank 60 20 80 40 2009-06-26 1350 585
 Cho'Gath Tank 40 30 80 70 2009-06-26 1350 585
 Galio Tank 70 30 60 40 2010-08-10 6300 975
 Leona Tank 80 40 30 40 2011-07-13 6300 975
 Maokai Tank 80 30 60 40 2011-02-16 6300 975
 Rammus Tank 100 40 50 50 2009-07-10 3150 975
 Sejuani Tank 70 50 60 40 2012-01-17 6300 975
 Shen Tank 90 30 30 30 2010-03-24 3150 975
 Singed Tank 60 50 70 50 2009-04-18 1350 585

而備有良有的生命評價而且有能力吸收大量傷害的還有

 Malphite Fighter 60 50 70 30 2009-09-02 1350 585

 Skarner Fighter 60 70 50 50 2011-08-09 6300 975

 Dr. Mundo Fighter 70 50 60 40 2009-09-02 1350 585
 Volibear Fighter 70 60 40 40 2011-11-29 6300 975
 Blitzcrank Fighter 80 40 50 60 2009-09-02 3150 975
 Sion Fighter 80 50 70 40 2009-02-21 1350 585
 Taric Support 80 40 50 30 2009-08-19 1350 585

Jarvan, Udyr 和Karma 的技能難以持久因此雖有高血量但只為作戰風格所需, 因此就不算了

因其持久護盾而被人放了在半坦和坦之間的

 Garen Fighter 40 90 20 20 2010-04-27 1350 585

 Mordekaiser Fighter 60 60 60 30 2010-02-24 3150 975

放在坦隊只能打遊擊

網上有些人很有閒心的放了坦隊的對戰過程到youtube, 有興趣可以參考
http://www.youtube.com/results?search_query=lol+tank+team&oq=lol+tank+team&aq=f&aqi=g1&aql=&gs_sm=e&gs_upl=20046l22056l0l22347l13l11l0l4l4l0l123l498l6.1l7l0

但戰鬥質素參差不齊, 大多也當著trolling 的心態玩, 參考一下組合就好

我給與在坦隊各英雄中評價比較好的有下面幾個

1. Blitzcrank, 最佳的initiator / Dr. Mundo, 持久力強
2. Sejuani / Alistar CC強 混戰能力高
3. Amumu / Rummus, 傳統老坦, 大範圍
4. 全遊戲最硬的Shen, 能Taunt 能保命
5. Volibear / Singed, 血足, 追擊 
6. Malphite, 擁有大量傷害的initiator, 但要留意魔抗可能不足

除了Mundo 可以出大量血裝外, 其他英雄在齊裝的情況下都應是大約4000血和150arm/mr 和兩件如ROA 或Atmas 附帶的主屬
 

如果說對面對伍中的DPS是為了抓緊隊型中創造的機會在幾秒來殺人的話, 坦隊就是令整個combo 打散, 抓DPS 的方針不會變, 但卻不是為了能秒殺, 而是為了在不斷的CC 途中, 令Sejuani, Mundo, Garen, Singed, Rummus 等和各人的Sunfire Cape 傷害最大化, 再同時用中等的傷害把對面團滅。在只能抱團的後期, 這幾乎是壓倒性的戰力。

分析:

問題1. Madred's Bloodrazor, 這件破坦的裝備要如何剋制?
這幾乎是在第一時間會提出的問題, 如果血是4k, 4%=160 傷, 在攻速鞋, 1 phantom dancer, 1 Infinity Edge, 1 Madred 的情況下 攻擊多會達到230而攻速是2.0 之譜, 計算之下, 每次要承受(230+160)*0.4 = 156 = 每秒300的傷害, 在一近一遠的雙DPS 集火下,  計上暴擊即使滿血也會在5秒後倒下, 在普通的會戰中可以說只是一個序曲。

但是作為上面的任何一個坦, 近戰dps 幾乎是無法輸出的, 每人都有CC 可以拖延MDPS 至少一秒以上, 與此同時, RDPS 也要顧及移動而無法對一人不斷發射, 能保持到1.0攻速算很合格了。所以五秒時間看似短, 實際長得很。

混戰途中千變萬化, 我只是想說, 五名英雄就有五名英雄相應的能力, 如果一個人站著給另一個主力砍也要10秒的話, 對我而言是十分安全了。對面當然是希望可以五人集火, 但單論CC 的話, 面對坦隊也誠然十分有難度。

問題2. 被大傷害 AOE 消磨, 能對應嗎?
那要先想想, 如果被疊了四件魔裝的法師攻擊, 會掉多少血? 看似很痛, 而其實還要看看數據, 普遍來說一般10秒左右的技能會吃0.6AP, 法師有400ap 時, 附加的是240, 外加初始的200到400左右, 有大約600的魔攻, 看似很痛的技能在150MR 下只收240, 只能算是一般的harrastment, 難以在會戰中搶眼。因此FoN/Veil 幾乎是坦必疊之物, 一來防法師, 二來還可抗Madred/wit's end/malady

問題3. %魔物穿透還能應付嗎?
對比起上面兩個, 這種道具絕對是對坦隊做成更大挑戰, 150的防在Last Whisper 或雙Abyssal Scepter的狀態下會變成只有90, 但不要看少這90, 也代表了0.52, 即也約能抵抗一半的攻擊, 對比起之前的0.6, 實際提升了20%攻擊力, 會令坦在8秒內被單人擊倒, 應變時間的縮短能否足夠應付只可以看玩家的經驗, 十分難下定論了, 在這個時候可以抓取IE, PD, MB, LW 全套的玩家優先下單, 但如果對應的是Tris 或Cait 是比較困難, Yi 或 Tryn 有時候也會強殺不能, 其他的還比較好辦的, 雖然一擊能打到650以外的招式不少, 但擊出後能否有好隊型實在難說。混戰的確不可空口說的。
 

全坦的弱點:

全場難以成為主流除了是因為殺人手續繁複外, 更重要的是它明顯的缺點

1. 全坦的戰鬥十分穩健, 但要保持到上面所說的後期, 對機動性不高的這隊, 十分有難度, 面對裝備慢慢變得優良, 塔可抗不住幾下就破了, 因此坦隊很多時是清一色Fortify + Teleport 以增加成功率
2. 全坦的戰鬥容易提早進入大後期, 令Trist / Yi / Nasus / Veigar 等高手在長期farm 下獲得極高性能, 而一嘯崩盤。
3. 推塔能力不足, 比起前方擁有一名甚至兩名大AD, 坦方很可能因被偷塔而疲於奔命。
4. 即使打出順風局也比較不容易把握成為勝局, 而逆風時更容易一敗塗地
5. 對線階段易被Ranged 放風箏

全坦的優點:

1. 戰線持久, 有些許等級優勢而且不易出現逆風局
2. 後期戰鬥壓制性強
3. 打野人選有彈性

發表時間:2012年2月7日 | 評論 (2) | 全文

百變香江

之前比人delete, 我幾驚以後都搵唔返啊!!! 

好感人好感人ge 歌

發表時間:2012年2月6日 | 評論 (1) | 全文