2015-06-30 90 views
1

我寫了一個算法來獲得一箇中綴語句將其更改爲postfix,現在我想對該語句執行計算。我看過this as a sample,但我無法理解它的某些部分會發生什麼。它正在使用Scala Stack。如何使用Scala Stack進行後綴算術計算?

  1. 如何做這部分工作:

    case x :: y :: xs => xs ++ List(op(y, x)) 
    
  2. ,我用我的計算類型是整數和RDDS因此,在這個例子中,如果我用「任何」取代「浮動」是對的嗎?

+0

如果你不明白是什麼線是幹什麼的,我懷疑你有什麼不明白Scala的'match'語句做在所有。看看像http://docs.scala-lang.org/tutorials/tour/pattern-matching.html或http://www.tutorialspoint.com/scala/scala_pattern_matching.htm這樣的教程,然後回到它。 – childofsoong

+0

@soong謝謝我明白這個匹配我的問題是語法「x :: y :: xs」 – Rubbic

+1

'::'是'List'特有的一種語法,它象徵着追加到列表中。所以,總體情況是'我可以將這個解析爲一個包含兩個項目和一個剩餘(可以爲空)的列表嗎?如果是這樣,那些項目是'x'和'y',其餘部分是'xs'' – childofsoong

回答

1

要將我的評論到一個答案,然後試圖回答第2部分:表示前面加上現有列表的

::List的特殊語法(以及其他收藏品)。所討論的模式(在包含match的上下文中)是將兩個元素(其將分別存儲在xy中)和剩餘(其可以是空的或Nil並且存儲在xs中)匹配列表。

至於第二個問題,我對你將如何解析一個項目到一個RDD有點困惑,但我會建議你製作一種類型的標記類,可以封裝一個整數或RDD。通過這種方式,你不能在任何事情嘗試傳遞完全不相關的值時出現任何錯誤,因爲你聲明它爲Any

編輯:根據您的意見,我建議是這樣的:

expressions match { 
    case x: RDD :: y: RDD :: xs => {//do what you want with two RDDs here} 
    case x: RDD :: y: Int :: xs => {//do what you want with one of each here} 
    case x: Int :: y: RDD :: xs => {//do what you want with one of each in the other order here} 
    case x: Int :: y: Int :: xs => {//do what you want with two Ints here} 
} 
+0

我已經實現了用於RDD計算的「+ -/*」,我的RDD是:RDD [(Int,Array [Float])]現在我需要做的是當我檢查是否有兩個項目列表來執行操作,以及它們是RDD還是浮點數,RDD和RDD,還是浮點數和浮點數,然後調用我的覆蓋+ - * /並將結果推送回堆棧 – Rubbic

+0

已更新的答案反映了這一點。 – childofsoong

+0

非常感謝你,這是一個很好的提示,並給了我一個想法如何處理它! – Rubbic