참고 : 당신이 단지 다른 답변에서 언급 한 목록을 필터링 할 수 있습니다 보인다 질문을 다시 읽고, 내 대답은 최소를 찾기 위해 초기 요구 사항에 초점을 맞추고 목록의 요소. 어쨌든 나는 그것을 게시 할 것이고, 누군가가 유용하다고 생각하면 좋겠다.
가드 구문은 올바르지 만 사용자가 가지고있는 것과 거의 같습니다. "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)
시도해 준 내용을 보여줄 수 있습니까? 특정 문제에 대해 도움을 줄 수 있습니까? – Sibi