내 모듈에서 데이터 형식 중 하나에 대한 사용자 지정 읽기 함수를 쓰고 있습니다. 예를 들어 read "(1 + 1)" :: Data
을 입력하면 Plus 1 1
을 반환하고 싶습니다. 내 데이터 신고는 data Data = Plus Int Int
입니다. 감사합니다.사용자 지정 읽기 함수의 패턴 일치
1
A
답변
2
GHC의 ReadP을 사용할 수 있습니다.
6
이것은 파서에 더 잘 맞는 것으로 들립니다. Parsec은 강력 하스켈 파서 결합 자 라이브러리입니다.
3
나는 파서를 사용하는 개념을 2 등하고 싶습니다. 그러나 패턴 일치를 절대적으로 사용해야하는 경우 다음과 같이하십시오.
import Data.List
data Expr = Plus Int Int | Minus Int Int deriving Show
test = [ myRead "(1 + 1)", myRead "(2-1)" ]
myRead = match . lexer
where
match ["(",a,"+",b,")"] = Plus (read a) (read b)
match ["(",a,"-",b,")"] = Minus (read a) (read b)
match garbage = error $ "Cannot parse " ++ show garbage
lexer = unfoldr next_lexeme
where
next_lexeme "" = Nothing
next_lexeme str = Just $ head $ lex str
관련 문제
- 1. 패턴 일치
- 2. 둘 이상의 일치 패턴 일치
- 3. 입력 패턴 일치 자바
- 4. Scheme : 패턴 일치 구문
- 5. 자바에서 패턴 일치
- 6. ocaml 패턴 일치 질문
- 7. Linq 일치 패턴
- 8. 자바 정규식 패턴 일치
- 9. jQuery에서 패턴 일치?
- 10. Java 문 패턴 일치
- 11. 클래스 [_] 유형의 패턴 일치?
- 12. 위치 패턴 일치
- 13. 자바 스크립트 패턴 일치
- 14. 정규식 패턴 (URL 일치)
- 15. 패턴 일치 D
- 16. 표현식 패턴 일치
- 17. Bash : 다중 패턴 일치
- 18. 스키마 : 패턴 일치 구문
- 19. 캐릭터의 정규식 패턴 일치
- 20. 문자열의 패턴 일치 자동화
- 21. 사용자 지정 함수의 네임 스페이스 최소화
- 22. 사용자 지정 XML 문서의 유효성 검사 패턴
- 23. .NET의 사용자 지정 이벤트 디자인 패턴
- 24. WPF 사용자 지정 컨트롤 디자인 패턴. MVVM?
- 25. 스칼라 패턴 일치 빠른 참조
- 26. C#의 Directory.GetFiles() 패턴 일치
- 27. 목록 정렬 및 패턴 일치
- 28. Lua 하위 패턴 일치 홀수
- 29. Haskell의 패턴 일치 Seq 's
- 30. 정규식 전체 입력 일치 패턴
여기에 어떤 질문이 있는지 잘 모르겠습니다. 귀하의 주제는 패턴 일치를 언급하지만 질문의 본문은 그렇지 않습니다. 당신은 커스텀 읽기 기능을 쓰고 있다고 말했지만, 당신은 어떤 문제가 발생했는지 말하지 않습니다. – sepp2k
문제는 문자열과 일치하는 일부 패턴을 수행하려고합니다. 예 : 문자열이 "(1 + 1)"이면 플러스 1을 반환합니다. "(2 - 1)"이면 마이너스 2 1을 반환합니다. 연산자는 + - */일 수 있습니다. 피연산자는 정수가 될 수 있습니다. 그러나 연산자는 공백으로 묶어야하며 전체 표현식에 괄호가 있어야합니다. – altair211