我是Haskell的新手,正在做一些簡單的練習。對於這個練習,我正在寫一個函數來檢查一個列表是否是使用遞歸的另一個列表的子集。非常簡單的Haskell代碼不起作用,「變量不在範圍內」
下面的代碼:
subset [] xs = True
subset (x:xs) ys = if elem x ys == False then False
else subset (tail xs) (delete x ys)
我收到以下錯誤信息:
C:\Functioneel programmeren\week4.hs:9:43: error:
Variable not in scope: delete :: t1 -> t t1 -> t t1
是什麼意思,甚至?
只有當我將「(刪除x ys)」改爲「ys」時,該程序才起作用,但是它不會做它應該做的事情。
任何幫助將是偉大的,在此先感謝。
定義了「delete」的位置? – Polygnome
我的印象是,這是Haskell的一個內置函數:http://hackage.haskell.org/package/base-4.9.1.0/docs/Data-List.html#v:delete – Meurth
順便說一句,你的'if'可以用更易讀的形式重寫爲'elem x ys && subset ...'。通常,我們傾向於在Haskell中避免'== False'和'if..then False'。另外'tail xs'看起來不正確,你確定你不需要'xs'嗎? – chi