2016-02-13 80 views
0

enter image description hereHaskell - 多個IF語句

我想在Haskell中實現上面的DPLL算法。但問題是我不知道如何獲得多個if語句來運行。 所以我想,你可以模式匹配的第一個2 if語句。但是你不能爲第三和第四做?因爲它們都必須運行,並且return語句也必須運行。

如何使多個if語句就像在Haskell上面?另外,我對Haskell很新,所以我不能做任何「複雜」的事情。

+1

如果你是‘很新的哈斯克爾’,你‘不能做複雜的事情’也許寫DPLL SAT求解器不是第一運動最合適的選擇。通過一切手段,給它一個嘗試,但它可能是有幫助的,以熟悉的語言SOLV首先是一些更基本的任務。 – chi

回答

4

使用模式警衛。例如

dpll clauses symbols modell 
    | "all clauses true" = true 
    | "some clauses false" = false 
    | (p,value) <- find_pure_symbol symbols clauses model, 
    nonnull p = dpll clauses ... 
    | (p,value) <- find_unit_clause clauses model, 
    nonnull p = dpll clauses ... 
    | p <- first symbols, r <- rest symbols = 
       dpll clauses ... || dpll clauses .... 

(看起來並不是所有的條款真並不意味着一些條款虛假的,否則你永遠無法達到第3和下面的情況。)

挑戰就制定的條件,例子中我與他們打上「在他們身邊,但他們爲bool類型的正常哈斯克爾表達式。

+0

這真的是對的嗎?我沒有看到你的代碼如何讓最後2個ifs運行? – karambit

+0

@karambit我假設你有一個像'find_pure_symbol'和'find_unit_symbol'函數返回一個元組'(P,價值)'。具有'<-'的模式守衛子句應用該函數,並且以下條件(用逗號分隔)是* if *。我還假定了函數「nonnull」,「rest」和「first」的存在 – Ingo