我是學生,在編程課程中我們必須學習Haskell。所以我是新手,並沒有那麼多的經驗。此外,我不熟悉在論壇中發佈問題。如何調用一個集成在Haskell類型中的函數?
所以首先我將張貼在圖書館,我有工作。 (DA:確定性自動機)
type State = Integer
type DA = (State, State -> Char -> State, State -> Bool)
type ListDA = (State, [((State, Char), State)], [State])
a :: DA
a = (0, delta, (==1))
where
delta 0 'a' = 1
delta 1 'a' = 1
delta 2 'a' = 1
delta 0 'b' = 2
delta 1 'b' = 2
delta 2 'b' = 2
toDA :: ListDA -> DA
toDA (start, delta, final) = (start, deltaFun delta, (`elem` final))
where deltaFun dl = curry (fromMaybe 0 . flip lookup dl)
戶田函數採用在其列表表示的自動機,將其轉換成自動機。這個功能和圖書館的其他部分由講座主席給出。
現在的問題是讀取字符串後寫型
advance :: DA -> State -> String -> State
此函數採用的自動機的狀態和一個字符串並返回自動機的狀態的功能。
理念是清晰爲止。 DA型自動機具有狀態轉換函數增量。所以函數「advance」必須以某種方式調用delta函數。但是我怎樣才能訪問一個集成在一個類型中的函數呢?
感謝您的快速支持。我試圖找出一個解決方案,但沒有成功。我嘗試了'advance :: DA - > State - > String - > State advance(start,step,accept)State Char:Chars = advance(start,step,accept)(step state char)實現一個遞歸函數來遍歷要讀取的字符串的元素。將其加載到GHCi中會產生解析錯誤。那麼我的錯誤在哪裏? – 0niveau
@ user1838559:變量必須以小寫字母開頭,所以使用「chars」而不是「Chars」。另外,像':'這樣的運算符比函數應用程序的優先級低,即使在模式中,所以你需要在括號(char:chars)的周圍加上括號。 – hammar
@hammer:謝謝你的回答。我很抱歉提出這樣一個愚蠢的問題,並且因爲這些拼寫錯誤而浪費了你的時間;-) – 0niveau