haskell: Phase 10 conformance — statistics.hs (5/5) + newton.hs (5/5), Phase 10 complete
Some checks failed
Test, Build, and Deploy / test-build-deploy (push) Failing after 1m10s

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
This commit is contained in:
2026-05-07 08:33:00 +00:00
parent a5c41d2573
commit d2638170db
4 changed files with 104 additions and 2 deletions

View File

@@ -20,7 +20,7 @@ if [ ! -x "$SX_SERVER" ]; then
fi
fi
PROGRAMS=(fib sieve quicksort nqueens calculator collatz palindrome maybe fizzbuzz anagram roman binary either primes zipwith matrix wordcount powers caesar runlength-str showadt showio partial)
PROGRAMS=(fib sieve quicksort nqueens calculator collatz palindrome maybe fizzbuzz anagram roman binary either primes zipwith matrix wordcount powers caesar runlength-str showadt showio partial statistics newton)
PASS_COUNTS=()
FAIL_COUNTS=()

View File

@@ -0,0 +1,49 @@
;; newton.hs — Newton's method for square root.
;; Source: classic numerical analysis exercise.
;;
;; Exercises Phase 10: `Float`, `abs`, `/`, iteration via `until`.
(define
hk-prog-val
(fn
(src name)
(hk-deep-force (get (hk-eval-program (hk-core src)) name))))
(define
hk-newton-source
"improve x guess = (guess + x / guess) / 2\n\ngoodEnough x guess = abs (guess * guess - x) < 0.0001\n\nnewtonSqrt x = newtonHelp x 1.0\n\nnewtonHelp x guess = if goodEnough x guess\n then guess\n else newtonHelp x (improve x guess)\n")
(hk-test
"newton.hs — newtonSqrt 4 ≈ 2"
(hk-prog-val
(str hk-newton-source "r = abs (newtonSqrt 4.0 - 2.0) < 0.001\n")
"r")
(list "True"))
(hk-test
"newton.hs — newtonSqrt 9 ≈ 3"
(hk-prog-val
(str hk-newton-source "r = abs (newtonSqrt 9.0 - 3.0) < 0.001\n")
"r")
(list "True"))
(hk-test
"newton.hs — newtonSqrt 2 ≈ 1.41421"
(hk-prog-val
(str hk-newton-source "r = abs (newtonSqrt 2.0 - 1.41421) < 0.001\n")
"r")
(list "True"))
(hk-test
"newton.hs — improve converges (one step)"
(hk-prog-val (str hk-newton-source "r = improve 4.0 1.0\n") "r")
2.5)
(hk-test
"newton.hs — newtonSqrt 100 ≈ 10"
(hk-prog-val
(str hk-newton-source "r = abs (newtonSqrt 100.0 - 10.0) < 0.001\n")
"r")
(list "True"))
{:fails hk-test-fails :pass hk-test-pass :fail hk-test-fail}

View File

@@ -0,0 +1,45 @@
;; statistics.hs — mean, variance, std-dev on a [Double].
;; Source: classic textbook example.
;;
;; Exercises Phase 10: `fromIntegral`, `/`, `sqrt`, list ops on `[Double]`.
(define
hk-prog-val
(fn
(src name)
(hk-deep-force (get (hk-eval-program (hk-core src)) name))))
(define
hk-stats-source
"mean xs = sum xs / fromIntegral (length xs)\n\nvariance xs = let m = mean xs\n sqDiff x = (x - m) * (x - m)\n in sum (map sqDiff xs) / fromIntegral (length xs)\n\nstdDev xs = sqrt (variance xs)\n")
(hk-test
"statistics.hs — mean [1,2,3,4,5] = 3"
(hk-prog-val (str hk-stats-source "r = mean [1.0,2.0,3.0,4.0,5.0]\n") "r")
3)
(hk-test
"statistics.hs — mean [10,20,30] = 20"
(hk-prog-val (str hk-stats-source "r = mean [10.0,20.0,30.0]\n") "r")
20)
(hk-test
"statistics.hs — variance [2,4,4,4,5,5,7,9] = 4"
(hk-prog-val
(str hk-stats-source "r = variance [2.0,4.0,4.0,4.0,5.0,5.0,7.0,9.0]\n")
"r")
4)
(hk-test
"statistics.hs — stdDev [2,4,4,4,5,5,7,9] = 2"
(hk-prog-val
(str hk-stats-source "r = stdDev [2.0,4.0,4.0,4.0,5.0,5.0,7.0,9.0]\n")
"r")
2)
(hk-test
"statistics.hs — variance of constant list = 0"
(hk-prog-val (str hk-stats-source "r = variance [5.0,5.0,5.0,5.0]\n") "r")
0)
{:fails hk-test-fails :pass hk-test-pass :fail hk-test-fail}