我在純腳本教程中找到了這個函式,并且我正在嘗試轉換為 Haskell,因為我認為有時以這種方式進行復雜的串列理解會很好。我被困在只讓直角三角形通過解決方案集的警戒線(已注釋掉)上。
triples :: Int -> [[Int]]
triples n = do
z <- [1 .. n]
y <- [1 .. z]
x <- [1 .. y]
-- guard x * x y * y == z * z ?? not sure how to do this
return [x, y, z]
在純腳本中:
-- Find Pythagorean triples using an array comprehension.
triples :: Int -> Array (Array Int)
triples n = do
z <- 1 .. n
y <- 1 .. z
x <- 1 .. y
guard $ x * x y * y == z * z
pure [x, y, z]
uj5u.com熱心網友回復:
解決方案幾乎是相同的代碼:
import Control.Monad (guard)
triples :: Int -> [[Int]]
triples n = do
z <- [1 .. n]
y <- [1 .. z]
x <- [1 .. y]
guard $ x * x y * y == z * z
return [x, y, z]
只記得匯入guard. 請注意,在這種情況下,您可以假裝guard定義為:
guard :: Bool -> [()]
guard True = [()]
guard False = []
庫的定義更籠統,但在這里無所謂。原則上,您甚至可以使用此定義來guard避免從庫中匯入。
轉載請註明出處,本文鏈接:https://www.uj5u.com/qianduan/462849.html
