这里的第一个问题,以及普通LISP和Haskell的新手,请善待.我在Common LISP中有一个函数 - 下面的代码 - 用于判断三角形的面积是否为整数?(整数?).
(defun area-int-p (a b c)
(let* ((s (/ (+ a b c) 2))
(area (sqrt (* s (- s a) (- s b) (- s c)))))
(if (equal (ceiling area) (floor area))
t
nil)))
Run Code Online (Sandbox Code Playgroud)
这应该使用Heron的公式来计算三角形的面积,给定三边的大小,并确定它是否是比较天花板和地板的整数.我们被告知等边三角形的面积永远不是整数.因此,为了测试函数是否正常工作,我使用参数运行它333.这是我得到的回报:
CL-USER> (area-int-p 333 333 333)
NIL
Run Code Online (Sandbox Code Playgroud)
完善!有用.为了进一步测试它,我用参数运行它3333.这是我得到的回报:
CL-USER> (area-int-p 3333 3333 3333)
T
Run Code Online (Sandbox Code Playgroud)
有些事情是错的,这不应该发生!所以,我尝试以下,希望等效的Haskell函数看看会发生什么:
areaIntP :: (Integral a) => a -> a -> a -> Bool
areaIntP a b c =
let aa …Run Code Online (Sandbox Code Playgroud)