2014-02-17 76 views
-2
  • 的nextS:=的nextS(步驟)* NEXTSTEP:=彈出(的nextS)/*如何變換這一部分:在Haskell代碼(=)
+3

':='是不是一個標準的Haskell運營商,我所知道的(或[Hoogle](http://www.haskell.org/hoogle/?hoogle=%3A%3D)知道)。你能提供更多的上下文嗎?你在進口一個圖書館嗎? – crockeea

+0

請僅在您的問題中使用相關標籤:除非是來自Real World Haskell,否則您不應該包含標籤。 – crockeea

+0

我有一個blockcode,應該像Haskell這樣轉換一個小部分.result:= backtrack(nextstep,goal,(depth + 1),[step:path])Idont知道這個操作符(:=)做?!! – user3317519

回答

4

(:=)實際上是一個構造函數。它建立了一個數據類型。我們無法知道什麼數據類型它不知道你導入了什麼庫。但是,作爲一個例子

data Example = String := Int 

,然後我們可以寫

demo = "foo" := 0 

demo2 :: Example -> Int 
demo2 (_ := i) = i 

在第一demo我們使用此構造方法構造一個Example,並在其兩端的第二,我們的模式匹配,並返回Int組件。

+0

確定完美謝謝我得到它..我知道(:)是acostructor,但這一個..不知道:=? – user3317519

+3

@ user3317519 Haskell對構造函數有相當簡單的規則,所有的構造函數都是以':='開頭的中綴運算符,或者以大寫字母開頭。當然,必須在構造函數的某個地方定義一些定義,但你總是可以通過這樣的函數告訴構造函數 – jozefg

+2

@jozefg這應該是「以'開頭:'或一個大寫字母」。 –

3

鑑於您刪除的問題的上下文:您有一個僞代碼算法,需要在Haskell中實現它。在這種情況下,:=意味着「分配」,並簡寫爲=在Haskell中。當然,你不能只是逐個符號地翻譯僞代碼,並希望最終得到一個Haskell程序。例如。僞代碼具有可變變量的循環;你將不得不使用遞歸。

這是一個很簡單的例子:

僞代碼:

i := 0 
j := 10 

while (i < j) 
    i := i + 1 
    j := j - 1 

return j 

哈斯克爾:

x = let (_, j) = foo 0 10 in j 
    where foo i j | i < j = foo (i + 1) (j - 1) 
        | otherwise = (i, j) 
+0

謝謝你能給我一個(while)在haskell的例子嗎? – user3317519

+0

我已經添加了一個示例。 –