나는 학생이고 프로그래밍 과정에서 우리는 하스켈을 배워야한다. 그래서 나는 그것에 익숙하지 않고 많은 경험이 없습니다. 또한 포럼에 질문을 올리는 것에 익숙하지 않습니다.어떻게 하스켈에있는 유형으로 통합 된 함수를 호출 할 수 있습니까?
먼저 라이브러리를 게시 할 예정이므로 함께 사용해야합니다. (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"는 델타 함수를 어떤 식 으로든 호출해야합니다. 하지만 형식에 통합 된 함수에 어떻게 액세스 할 수 있습니까?
이advance :: DA -> State -> String -> State
advance (start, step, accept) fromState chars = ....
type
키워드 그냥 type synonyms를 소개합니다 :
빠른 지원에 감사드립니다. 솔루션을 찾으려고했지만 성공하지 못했습니다. 나는 사전을 시도했다 :: DA -> 상태 -> 문자열 -> 상태 사전 (시작, 단계, 수락) 상태 문자 : Chars = 진행 (시작, 단계, 수락) (단계 상태 Char) Chars ' 읽히는 String의 요소를 순환하는 재귀 함수를 구현합니다. GHCi에로드하면 구문 분석 오류가 발생합니다. 그럼 내 실수는 어디 있니? – 0niveau
@ user1838559 : 변수는 소문자로 시작해야하므로 'Chars'가 아닌'chars'를 사용하십시오. 또한,':'와 같은 연산자는 패턴에서도 함수 응용 프로그램보다 우선 순위가 낮으므로'(char : chars)'주위에 괄호를 써야합니다. – hammar
@ 해머 : 그 해답을 가져 주셔서 감사합니다. 이런 어리석은 질문을하고이 철자 오류로 시간을 낭비하는 것에 사과드립니다. – 0niveau