요소

2014-12-04 1 views
0

나는 목록의 최소를 계산해야하지만 메신저는이>는 =이 유형 선언
보통주에 일을하려고 ->는 [A] -> [A]
가 계산 당신은 아마 ... 그럼에도 불구하고, 두 개의 힌트를 얻을 가이드 몇 가지 기본적인 하스켈을 읽는되어야
지정된 인수 (함수의 첫 번째 인수)요소

mymin :: Ord a => a-> [a] -> [a] 

mymin (x:y:xs) 
     | x > y : mymin(y,xs) 
      |otherwise 
+0

시도해 준 내용을 보여줄 수 있습니까? 특정 문제에 대해 도움을 줄 수 있습니까? – Sibi

답변

2

그냥 filter을 사용하십시오. 그것은 필터링 목록을 위해 만들어진 :

mymin :: Ord a => a -> [a] -> [a] 
mymin x = filter (< x) 
+1

초보자를위한 참고 사항 :'( a

0

보다 작은 주어진리스트의 이러한 요소의 목록 이 문제가 발생합니다 :

  • 기본 케이스로 시작 : 빈 목록 및 임의 피벗 요소에 대해 예상되는 출력은 얼마입니까?
  • mymin
  • 는 두 개의 인수를 취하므로 코드의 첫 번째 줄은 아마 mymin y (x:xs)

편집해야한다 : 제 생각에 당신은 filter을 사용하는 방법에 대한 생각?

0

참고 : 당신이 단지 다른 답변에서 언급 한 목록을 필터링 할 수 있습니다 보인다 질문을 다시 읽고, 내 대답은 최소를 찾기 위해 초기 요구 사항에 초점을 맞추고 목록의 요소. 어쨌든 나는 그것을 게시 할 것이고, 누군가가 유용하다고 생각하면 좋겠다.


가드 구문은 올바르지 만 사용자가 가지고있는 것과 거의 같습니다. "Guards, guards!" in learn you a haskell 섹션을 살펴보십시오. 경비원은 if a then b, if c then d과 같은 여러 명령문을 함수 정의에 포함시킬 수 있습니다.

otherwise 사례에 대한 정의를 포함해야합니다.

코드에서도 | 문자를 정렬해야하며 공백은 중요하며 컴파일러/인터프리터가 프로그램을 실행하는 방법을 변경합니다.

mymin(y,xs)과 같은 곳에서 Ord a => a-> [a] -> [a] 유형의 기능으로 다시 전달하려는 것처럼 보일 수 있습니다. 그러나 당신이 그것을 가지고 있어도 작동하지 않을 것입니다. 현재 정의 인 mymin (x:y:xs)Ord a => [a] -> [a]과 일치하며 매개 변수가 누락되었습니다.

는 함께 가장 작은 값을 전달하고 싶었다면 재귀 적으로는 같은 정의를 제공해야 할 것 :

mymin :: (Ord a) => a -> [a] -> a 
mymin x (y:ys) 

내가 다음에 왔어요 작업을 확장합니다. 목록의 최소 요소를 반환하지만 빈 목록에는 정의되어 있지 않습니다 (오류가 발생합니다). 그것은 당신이 가진 것과 같은 줄에 있지만, 목록의 첫 번째 색인에 별도의 함수 인수로 전달하는 대신 가장 작은 발견 된 항목을 유지합니다.

mymin :: Ord a => [a] -> a 
mymin zs = head . mymin' $ zs 
    where mymin' (x:[]) = [x] 
     mymin' (x:y:xs) 
      | x > y = mymin' (y:xs) 
      | otherwise = mymin' (x:xs)