그래서 여러 정의 (가드)가있는 함수가 있는데 일치하는 항목에 따라 (a, b) 또는 [ (a, b)], 그러나 컴파일러가 오류를 일으키는 이유는 서로 다른 유형이기 때문입니다. 나는이 문제를 해결하기 위해 어느 하나를 사용하려했으나 아마도 그것을 올바르게 사용하지는 않았다 : P. 어떤 도움?다른 형식을 반환하는 함수를 얻는 방법
답변
Either
만이다 : 나는 당신이 여기를 사용하지만 방법에 무엇이 잘못되었는지 모르겠습니다
은 간단한의 사용의 예입니다 이것을하는 방법. 그러나
foo n = case stuff n of
Left (a,b) -> ...
Right pairs -> ...
를, 당신의 문제에 대해 아무것도 알 수 없습니다 : 누군가가이 함수를 호출 할 때
이stuff :: Int -> Either (Int,Int) [(Int,Int)]
stuff 0 = Left (0, 0)
stuff n = Right [ (x,x) | x <- [0..n] ]
그런 다음, 그들은 패턴 일치 알아낼 수있는 두 가지 유형이 반환 : 여기에 바보 같은 예제 일반적으로 나는 당신의 기능의 의미에 대해 좀 더 생각할 것을 권한다. 그것은 무엇을합니까, 그것은 무엇을 반환합니까? 정확하고 수학적이어야합니다. 대답이 간단할수록,이 함수는 나머지 프로그램과 Haskell의 개념과 더 잘 작동 할 것입니다. 나를 위해, 그런 설명에서는 Either
이 드물게 나타납니다. 두 결과를 어떻게 통합 할 수 있습니까? 함수에 맞는 것이면 Left (a,b)
대신에 싱글 톤리스트 [(a,b)]
을 반환하는 것일 수도 있습니다.
하스켈은 너무 똑똑하다. 파이썬이나 jQuery에서 익숙하지 않은 함수를 사용하면 잘 작동하지 않는다. 벙어리하고 정밀하게 유지하십시오. 에서 복잡한을 얻으십시오.이 간단한 조각을 작성하십시오. 이 문제에 대해 궁금한 점이 있으면 문제에 대한 자세한 내용, 수행하려는 내용 및 해결 방법에 대해 자세히 설명하는 다른 질문을하십시오. 설교를위한 죄송합니다 :-)
우리가 타입 시스템에서 원하는 속성이 * 보존 *이라는 것을 추가하자 :'stuff :: Int -> (Int, Int) '물건 7 '에 대한 호출은'[(x, x) | x [- [0..n]'형식의'[(Int, Int)]'이다. 이는 'stuff'의 선언 된 반환 유형과 다르므로 유형이 보존되지 않습니다.우리가 어떤 타입 시스템을 신뢰한다면이 불일치가 배제되어야합니다. 따라서 유형 검사기는 우리 프로그램이 잘못 입력 된 것으로 간주합니다. –
하스켈의 함수는 한 가지 타입 만 반환 할 수 있으므로 함수가 (a, b) [(a.b)] 형식을 반환하므로 둘 중 하나만 사용할 수 있습니다. 나에 사용자 정의 데이터 유형에 해당 - -
test a b =
if a == True
then Left (a,b)
else Right [(a,b)]
이제 내 기능은 다음과 같습니다. http://paste.pocoo.org/show/325090/ 여기에 오류가 있습니다. http : //paste.pocoo. org/show/325093/ –
@Chris'Right lgst i'는'Right (lgst i)'이어야합니다. – dave4420
좋아요. 그래서 http://paste.pocoo.org/show/325143/는 작동하지만, 후자의 두 명의 경비원은 http://paste.pocoo.org/show/325144/와 같이 보일 필요가 있습니다. http :// /paste.pocoo.org/show/325145/ –
- 1. 형식을 취하여 다른 형식을 반환하는 함수를 작성할 수 있습니까?
- 2. 다른 함수에서 함수를 반환하는 방법
- 3. F #에서 다른 형식을 반환하는 함수를 어떻게 만들 수 있습니까?
- 4. COM 개체의 형식을 얻는 방법
- 5. 반환하는 것과 다른 형식을 허용하는 속성 만들기
- 6. 비슷한 데이터 형식을 얻는 방법
- 7. NSManagedObject - 속성 형식을 얻는 방법
- 8. 문자열을 반환하는 구조 및 함수를 반환하는 함수 - 다른 동작입니까?
- 9. 익명 메서드/대리자에서 형식을 반환하는 방법
- 10. Silverlight - LinqToEntities - 익명 형식을 반환하는 방법
- 11. WCF 데이터 서비스에서 복합 형식을 반환하는 방법?
- 12. 다른 컨트롤러에서보기를 반환하는 방법
- 13. 다양한 데이터 형식을 반환하는 함수
- 14. 부스트 :: 신호의 반환 형식을 얻는 방법?
- 15. C# : 다른 스레드 내부의 if 문에서 형식을 반환하는 함수를 어떻게 호출합니까?
- 16. C 프로그램에서 char 함수를 반환하는 방법?
- 17. 함수 내에서 함수를 반환하는 방법 (반향과 반대로)
- 18. smarty의 표시 함수를 변수로 반환하는 방법
- 19. 오류 : 함수를 반환하는 함수
- 20. 추가 된 형식을 사용하는 PowerShell 추가 형식을 얻는 방법
- 21. jQuery AJAX 호출 결과를 얻는 방법 다른 함수를 호출하십시오.
- 22. 클래스를 반환하는 함수를 포함하는 클래스를 반환하는 함수
- 23. 새 클래스 개체를 반환하는 함수의 형식을 지정하는 방법
- 24. "문자열 []"문자열에서 .NET 배열 형식을 얻는 방법?
- 25. Windows : 존재하지 않는 DLL에서 형식을 얻는 방법?
- 26. 제네릭 형식을 추론하도록 C# 컴파일러를 얻는 방법?
- 27. 지연된 템플릿 매개 변수의 형식을 얻는 방법
- 28. 모든 지역의 시간 형식을 얻는 방법
- 29. nullable 형식에 대한 문자열 형식을 얻는 방법
- 30. F #에서 여러 제약 조건을 만족하는 형식을 반환하는 제네릭 함수를 선언하는 방법?
런타임시 가드가 일치하는 동안 컴파일 타임에 함수의 반환 유형을 알아야하기 때문에 직접 수행 할 수 없습니다. 하지만 정말로 다른 유형을 반환 하시겠습니까? 두 경우를 구별하기 위해 결과에 패턴 매치를하려는 경우, 어느 쪽이든 괜찮습니다. 아니면 싱글 톤리스트가 첫 번째 경우에 할 것인가? 당신이 할 일에 대해 더 자세히 설명해 주시겠습니까? – b0fh
http://paste.pocoo.org/show/325066/ 내 기능은 지금까지 –
이며 마법을 읽는 것과 같습니다. 그게 무슨 뜻이야? – luqui