我是 Haskell 的新手,遇到了一個我什至不確定我是否理解的問題,所以我可以使用一些幫助來解決它......
我正在嘗試創建一個簡單的函式,給定三個數字“a”“b”和“c”,將顯示“a”小于“b”和“b”i 小于“c”的所有組合,而增加它們。例如,“4”、“5”和“6”會給出類似“456、457、458、459、467、468、469、478、479、489、567、568、569、578、579、589、 678、679、689、789"
到目前為止,我的代碼如下所示:
axx :: Int -> Int -> Int -> Int
axx (x) (y) (z) = if y == 8 && z == 9
then x 1
else x
ayy :: Int -> Int -> Int -> Int
ayy (x) (y) (z) = let y = if z == 9 && y < 8
then y 1
else if z == 9 && y == 8
then x 1
else y
azz :: Int -> Int -> Int -> Int
azz (x) (y) (z) = let z = if z == 9
then y 1
else z 1
my_print_comb :: Int -> Int -> Int -> IO ()
my_print_comb (x) (y) (z) = do print (x)
print (y)
print (z)
if (x /= 7 && y /= 8 && z /= 9)
then do
putStr ", "
let x = axx (x y z)
let y = ayy (x y z)
let z = azz (x y z)
my_print_comb(x y z)
else putStr "\n"
但是當我嘗試編譯它時,我收到關于我的“azz”函式開始的行的“決議錯誤(可能是不正確的縮進或不匹配的括號)”錯誤訊息。我嘗試在網上尋找類似的案例,但到目前為止沒有任何運氣。
有人可以幫我嗎?
uj5u.com熱心網友回復:
您可以洗掉很多括號:axx (x) (y) (z)-> axx x y z。print (x)應該寫print x。
你得拿掉let y =,let z =李耀說。
同時洗掉括號
let x = axx (x y z)
let y = ayy (x y z)
let z = azz (x y z)
my_print_comb(x y z)
->
let x = axx x y z
y = ayy x y z
z = azz x y z
my_print_comb x y z
否則x被解釋為應用于yand的函式z。
使用功能應用程式清單您所寫的就是axx $ ((x $ y) $ z)您的意思((axx $ x) $ y) $ z。
infixr 0 $
($) :: (a -> b) -> a -> b
($) = id
通常,axx x y z = if x == 8 && z == 9 then .. else您使用模式匹配而不是檢查axx 8 y 9 = ..。
用于undefined :: a迭代開發
axx :: Int -> Int -> Int -> Int
axx x 8 9 = x 1
axx x y z = undefined
嘗試分離IO出來my_print_comb。
uj5u.com熱心網友回復:
洗掉let y =和和。let z =_ayyazz
轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/487873.html
標籤:哈斯克尔
上一篇:Haskell拆分、插入和串列
