Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/haskell/8.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/windows/16.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Parsing 如何在列表上使用if-then-else语句之类的过滤器?_Parsing_Haskell - Fatal编程技术网

Parsing 如何在列表上使用if-then-else语句之类的过滤器?

Parsing 如何在列表上使用if-then-else语句之类的过滤器?,parsing,haskell,Parsing,Haskell,我想将1个项目添加到只有一个项目的列表中,如果项目数大于1且最后一个项目相同,则在列表y中添加项目(使用toInt转换为整数后) 怎么办 import Data.List.Split z = splitOn "+" "x^2+2*x^3+x^2" y = map (splitOn "*") z x = map head y toInt :: [String] -> [Int] toInt = map read u = filter ((map length y)>1) y

我想将1个项目添加到只有一个项目的列表中,如果项目数大于1且最后一个项目相同,则在列表y中添加项目(使用toInt转换为整数后)

怎么办

import Data.List.Split

z = splitOn "+" "x^2+2*x^3+x^2"

y = map (splitOn "*") z

x = map head y

toInt :: [String] -> [Int]
toInt = map read

u = filter ((map length y)>1) y

Couldn't match expected type `a0 -> Bool' with actual type `Bool'
In the first argument of `filter', namely `((map length y) > 1)'
In the expression: filter ((map length y) > 1) y
In an equation for `u': u = filter ((map length y) > 1) y

失败,已加载模块:无。

编译器告诉您,
映射长度y>1
是一个布尔值,但
过滤器
需要一个函数。我不确定你到底想对y做什么,请指定你对不同y值的期望值。

编译器告诉你
映射长度y>1
是一个布尔值,但是
过滤器
需要一个函数。我不确定您到底想对y做什么,请指定您对不同y值的期望值。

您对
u
的定义显然是错误的。如果您提供类型签名,这会有所帮助,因此我们可以更好地理解您试图做的事情(即使您没有用文字告诉我们)

您评论说希望所有长度大于1的列表,这与删除第一个元素后获取所有非空列表相同。因此,使用filter,它分别测试每个元素(因此您不需要
映射
),并构建一个函数来测试单个列表的长度>1或其子列表的空值:

-- Use the O(n) length for your filter
u = filter ((> 1) . length) y

-- Or use an O(1) drop + null test
u' = filter (not . null . drop 1) y
在不使用函数组合(
)的情况下,这些函数是:

u = filter (\sublist -> length (sublist) > 1) y

u' = filter (\sublist -> not (null (drop 1 sublist))) y

你对
u
的定义显然很糟糕。如果您提供类型签名,这会有所帮助,因此我们可以更好地理解您试图做的事情(即使您没有用文字告诉我们)

您评论说希望所有长度大于1的列表,这与删除第一个元素后获取所有非空列表相同。因此,使用filter,它分别测试每个元素(因此您不需要
映射
),并构建一个函数来测试单个列表的长度>1或其子列表的空值:

-- Use the O(n) length for your filter
u = filter ((> 1) . length) y

-- Or use an O(1) drop + null test
u' = filter (not . null . drop 1) y
在不使用函数组合(
)的情况下,这些函数是:

u = filter (\sublist -> length (sublist) > 1) y

u' = filter (\sublist -> not (null (drop 1 sublist))) y

我希望选择列表长度>1的列表我希望选择列表长度>1的列表