Haskell 拥抱唐';t让脚本文件使用关键字";让我们;
我将此文件作为模块加载到Hugs,但出现以下错误: 错误文件:。\Hugs.hs:38-输入中的语法错误(意外关键字“let”)Haskell 拥抱唐';t让脚本文件使用关键字";让我们;,haskell,hugs,Haskell,Hugs,我将此文件作为模块加载到Hugs,但出现以下错误: 错误文件:。\Hugs.hs:38-输入中的语法错误(意外关键字“let”) 在顶层不能有let语句。简单地写 fac n = if n == 0 then 1 else n * fac (n-1) m = MetricMeasurement 2 Meter 删除让: fac n = if n == 0 then 1 else n * fac (n-1) m = MetricMeasurement 2 Meter 正如其他人所指出的,对于
在顶层不能有
let
语句。简单地写
fac n = if n == 0 then 1 else n * fac (n-1)
m = MetricMeasurement 2 Meter
删除
让:
fac n = if n == 0 then 1 else n * fac (n-1)
m = MetricMeasurement 2 Meter
正如其他人所指出的,对于顶级定义,您不使用let
,而只用于函数中的本地定义
我之所以回答这个问题,是因为我忍不住指出,通过使用模式匹配,您可以改进很多代码
对于符号
,可在顶层进行匹配:
symbol :: MetricUnit -> String
symbol Meter = "m"
symbol Liter = "L"
symbol KiloGram = "kg"
而对于另外两个,您可以使用case语句在u
上进行匹配,如下所示:
convert (MetricMeasurement x u) = case u of
Meter -> ImperialMeasurement (1.0936*x) Yard
Liter -> ImperialMeasurement (0.2642*x) Gallon
KiloGram -> ImperialMeasurement (2.2046*x) Pound
和convert(ImperialMeasurement x u)
类似
convert (MetricMeasurement x u) = case u of
Meter -> ImperialMeasurement (1.0936*x) Yard
Liter -> ImperialMeasurement (0.2642*x) Gallon
KiloGram -> ImperialMeasurement (2.2046*x) Pound