[英]Standard definition of list
我對列表的定義有疑問。 通常列表定義為data [a] = [] | a : [a]
data [a] = [] | a : [a]
但如果我在我的代碼上寫這樣的東西,我會定義data T a = N | a -> (T a)
data T a = N | a -> (T a)
解釋器給我一個錯誤:
類型或類聲明的格式錯誤的頭
你知道怎么回事嗎? .
看起來您的問題是您嘗試使用->
作為中綴構造函數,例如:
為了使用a -> b -> N
語法構建列表)。 這是不允許的,因為 Haskell 中的自定義中綴構造函數必須以:
字符開頭。
你奇怪的錯誤消息的原因是因為->
在 Haskell 中是為函數類型保留的,正如傑夫的回答所解釋的
試試這個:
-- Create a right-associative infix constructor.
data T a = N | a :-> (T a)
infixr :->
mylist :: T Int
mylist = 10 :-> 17 :-> N
--If we hadn't made the operator right associative,
-- we would need to use explicit parenthesis here
myotherlist :: T Int
myotherlist = 10 :-> (17 :-> N)
-- Example function
isempty :: T a -> Bool
isempty N = True
isempty (_ :-> _) = False
a -> T a
意味着 a 是一個返回T a
的函數,所以我認為這是錯誤的。 嘗試這樣的事情。
data T a = N | R a (T a)
N 是空列表(相當於[]
)值,R 是值構造函數(相當於:
)
在右側,您需要某種方式來攜帶a
值。 您現在可以正確列出喜歡的列表。
> N -- The empty List
> R 5 N -- a list with a single element and then the end
> R 7 (R 6 (R 5 N)) -- the list 7, 6, 5
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.