2017-09-23 36 views
-2

我試圖做到這一點得到一個Expressionlist of tuples (a pair of strings)功能不同的號碼,根據下面的代碼:錯誤:方程「testListTuple」有爭論

module Test where 

import Data.List 

type Symbol = String 

data Expression = Var Symbol -- variable 
    | Lambda Symbol Expression -- abstraction 
    | App Expression Expression -- application 
    deriving (Eq, Read) 

expTest = Lambda "x" $ Lambda "y" $ (Var "x" `App` Var "y") 

testListTuple :: Expression -> [(Symbol,Symbol)] -> [Symbol] 
testListTuple (exp) ((a,b):xs) = functionTest (exp) (a) (b) : testListTuple (exp) (xs) 
testListTuple _   = [] 


functionTest :: Expression -> Symbol -> Symbol -> Symbol 
functionTest _ a b = a ++ b 

runTest = testListTuple expTest [("a", "b"), ("c", "d")] 

但是,下面的錯誤是顯示:

enter image description here

解決此錯誤後,我仍然會完成實施functionTest

+0

呃。給他們相同數量的參數? – melpomene

回答

1

問題出在編譯器說的。 testListTuple的公式具有不同數量的參數。

第一個等式有兩個:testListTuple (exp) ((a,b):xs) = ...

第二個有一個:testListTuple _ = []

正確的定義是:

testListTuple :: Expression -> [(Symbol,Symbol)] -> [Symbol] 
testListTuple exp ((a,b):xs) = functionTest exp a b : testListTuple exp xs 
testListTuple _ _ = [] 
+0

我很驚訝,我忘了那個小細節。一個非常愚蠢的錯誤。打擾一下。 –