Haskell中的乐器弦张力计算器

Haskell中的乐器弦张力计算器,haskell,Haskell,我是哈斯克尔的新手,所以请记住这一点 我正在做一个相当简单的项目——弦乐器张力计算器。以下是到目前为止我得到的信息: data Operator = Metric | Imperial deriving Read eval o l u p = case o of Imperial -> (((2 * l * p)^2) * u) / 386.4 Metric -> (((2 * (l * 2.54) * p)^2) * u) / 386.4 prompt txt

我是哈斯克尔的新手,所以请记住这一点

我正在做一个相当简单的项目——弦乐器张力计算器。以下是到目前为止我得到的信息:

data Operator = Metric | Imperial
  deriving Read

eval o l u p = case o of
  Imperial -> (((2 * l * p)^2) * u) / 386.4

  Metric   -> (((2 * (l * 2.54) * p)^2) * u) / 386.4

prompt txt = do
  putStrLn txt
  readLn

main = do 
  o <- prompt "Metric or Imperial?"
  l <- prompt "Scale length?"
  u <- prompt "Gauge?" -- Unit Weight
  p <- prompt "Pitch? (In hertz)" 
  putStrLn $ "The result is " ++ show (eval o l u p)    
数据运算符=公制|英制
派生读
eval o l u p=情况o
英制->((2*l*p)^2*u)/386.4
公制->((2*(l*2.54)*p)^2)*u)/386.4
提示符txt=do
putStrLn txt
雷登
main=do

我给你一个基本解决方案的提示

将地图定义为成对的列表
(仪表、单位重量)
。根据
仪表进行订购

gw :: [(Double, Double)]
gw = [(1, 2), (2, 4), ... ]

然后,假设您要查找
g
。如果您想从
gw
中放弃所有带有gauge
的初始对,我将为您提供一个基本解决方案的提示

将地图定义为成对的列表
(仪表、单位重量)
。根据
仪表进行订购

gw :: [(Double, Double)]
gw = [(1, 2), (2, 4), ... ]

然后,假设您要查找
g
。您想从
gw
中丢弃所有带有gauge
的初始对,请注意,使用类型化物理量库(例如)可以更好地完成此类任务。此外,我不会为这种计算编写可执行程序,ghci更方便——或者说IHaskell。以下是字符串张力计算器的外观:(您可以自由混合不同单位系统的单位,库自动执行正确的单位转换。如果您输入的单位尺寸不匹配,它也会抱怨。)请注意,使用键入的物理量库可以更好地完成此类任务,比如。此外,我不会为这种计算编写可执行程序,ghci更方便——或者说IHaskell。下面是字符串张力计算器的外观:(您可以自由混合来自不同单位系统的单位,库自动执行正确的单位转换。如果您输入的单位尺寸不匹配,它也会抱怨。)
dropWhile (some predicate here) gw