isValid :: Position -> Bool
isValid Position(x _) = x
isValid Position(_ y) = y
| x 'elem' ['a'..'h'] && y 'elem' [1..8] = True
| otherwise = False
我一直收到此错误error: Parse error in pattern: x
我正在尝试编写一个函数,告诉我给定的poisition是否有效。 x
为['a'..'h']
且y
为[1..8]
答案 0 :(得分:3)
如此处所述:Syntax error on 'mod' Haskell
使用命名函数作为中缀运算符的语法使用反引号(严重重音,U + 0060),而不是撇号:
| x `elem` ['a'..'h'] && y `elem` [1..8] = True
------ ------
| otherwise = False
此外,Position(x _)
和Position(_ y)
不是有效模式 - 您可能打算使用(Position x _)
和(Position x y)
。请注意x
,因为x
不在您为(Position _ y)
编写的等式范围内。
(Position x _)
将匹配所有职位,因此我怀疑您有意:
isValid :: Position -> Bool
isValid (Position x y)
| x `elem` ['a'..'h'] && y `elem` [1..8] = True
| otherwise = False
或更简单:
isValid :: Position -> Bool
isValid (Position x y) = x `elem` ['a'..'h'] && y `elem` [1..8]
答案 1 :(得分:3)
我一直收到此错误错误:模式中的解析错误:
x
我正在尝试编写一个函数,告诉我给定的位置是否有效。x
为['a'..'h']
且y
为[1..8]
的位置。
其他答案已经讨论了什么是错的:你在条款中使用了一个没有界限x
的守卫:
isValid Position(_ y) = y
此外,您使用引号而不是使用elem
函数的反引号:
x 'elem' ['a'..'h']
因此,严格的解决办法是:
isValid :: Position -> Bool
isValid (Position x y)
| x `elem` ['a'..'h'] && y `elem` [1..8] = True
| otherwise = False
因为我们实际上返回了守卫的结果,所以我们不需要使用守卫并且可以将守卫折叠成一个表达式:
isValid :: Position -> Bool
isValid (Position x y) = x `elem` ['a'..'h'] && y `elem` [1..8]
尽管我们在这里使用范围而第二个范围是整数,但我们不必在范围内使用elem
,我们可以使用:
isValid :: Position -> Bool
isValid (Position x y) = 'a' <= x && x <= 'h' && 1 <= y && y <= 8
对于如此小的范围,可能不会对性能产生太大影响,但elem
适用于 O(n)最坏情况,而两个边界检查在 O(1)
答案 2 :(得分:2)
在
<script type="text/javascript">
google.charts.load('current', {packages: ["corechart","calendar","table"]});
google.charts.setOnLoadCallback(drawChart);
function drawChart()
{
var data = new google.visualization.DataTable();
data.addColumn('string', 'Nama Barang');
data.addColumn('number', 'Jumlah Transaksi');
data.addRows
([
<?php
$coba = "";
$petik = "'";
foreach ($dataPie_k as $row)
{
$coba = $coba."['$row->nama', $row->total],";
}
echo substr($coba,0,strlen($coba)-1);
?>
]);
var options =
{
title: 'Rating 5',
is3D: true,
legend: 'none',
pieSliceText: 'label',
};
var chart = new google.visualization.PieChart(document.getElementById('piechart'));
chart.draw(data, options);
}
</script>
| x 'elem' ['a'..'h'] && y 'elem' [1..8] = True
未绑定。
x
特别是。此外,您可能打算使用isValid Position(_ y) = y
,而不是`elem`
。
我正在尝试编写一个函数,告诉我给定的poisition是否有效。其中x是[&#39; a&#39; ..&#39; h&#39;],y是[1..8]
你没有写出'elem'
的定义,但似乎这就像是
Position
(为我而建)。