Variables 非常简单的Haskell代码没有';“不工作”;变量不在范围内“;
我是哈斯克尔的新手,正在做一些简单的练习。在本练习中,我将编写一个函数,使用递归检查一个列表是否是另一个列表的子集 代码如下:Variables 非常简单的Haskell代码没有';“不工作”;变量不在范围内“;,variables,haskell,scope,Variables,Haskell,Scope,我是哈斯克尔的新手,正在做一些简单的练习。在本练习中,我将编写一个函数,使用递归检查一个列表是否是另一个列表的子集 代码如下: 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: err
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
这到底是什么意思
这个程序只有在我将“(delete x ys)”更改为“ys”时才起作用,但它并没有完成它应该做的事情
任何帮助都会很好,提前谢谢。需要导入删除。根据,您应该在开头添加
import Data.List
此外,我猜你的函数
子集是错误的。子集[1,2,1][1,2,3]
的结果为False
删除
需要导入。根据,您应该在开头添加import Data.List
此外,我猜你的函数子集是错误的。subset[1,2,1][1,2,3]
的结果是False
在哪里定义了delete
?我的印象是这是Haskell中的一个内置函数:顺便说一句,你的if
可以以更可读的形式重写为elem x ys&&subset…
。通常,在Haskell中,我们倾向于避免==False
和if..then False
。另外,tail xs
看起来是错误的,你确定你不想改成xs
吗?delete
定义在哪里?我的印象是这是Haskell中的一个内置函数:顺便说一句,你的if
可以以更可读的形式重写为elem x ys&&subset…
。通常,在Haskell中,我们倾向于避免==False
和if..then False
。另外,tail xs
看起来有问题,你确定不想用xs
来代替吗?谢谢,我不知道我必须导入它。我认为结果应该是错误的,因为在你的例子的第二个列表中只有一个1,我不知道子集应该做什么,所以我只是猜测。我猜错了。@Meurth从数学上讲,一个集合不能包含重复项。在这种情况下,子列表
可能是函数的更好名称,因为列表/序列可能包含重复项。从数学的角度来看,{1,1,1}等于{1,1}等于{1}。@Polygenome谢谢你的回答,我想我的老师可以从中学到一些东西!:汉克斯,我不知道我必须导入它。我认为结果应该是错误的,因为在你的例子的第二个列表中只有一个1,我不知道子集应该做什么,所以我只是猜测。我猜错了。@Meurth从数学上讲,一个集合不能包含重复项。在这种情况下,子列表
可能是函数的更好名称,因为列表/序列可能包含重复项。从数学的角度来看,{1,1,1}等于{1,1}等于{1}。@Polygenome谢谢你的回答,我想我的老师可以从中学到一些东西!:D