문제

에서 프로그래밍,그것은 종종 중요한을 최적화하는 어떤"루핑"코드를 꼬리 재귀적입니다.꼬리 재귀적 알고리즘은 일반적으로 사이에 분할 두 가지 기능,그러나 하나 설정하는 기본 경우,그리고 다른 구현하는 실제 반복입니다.좋은(이기는 하지만 학술)예로 들 수 있는 역방향 함수이다.

reverse :: [a] -> [a]
reverse = reverse_helper []

reverse_helper :: [a] -> [a] -> [a]
reverse_helper result [] = result
reverse_helper result (x:xs) = reverse_helper (x:result) xs

"reverse_helper 되지 않습니다"정말 좋은 설명하는 이름입니다.그러나,"reverse_recursive_part"단지 어색하다.

무슨 이름 지정 규칙을 사용하를 도우미 기능이 같은가?

도움이 되었습니까?

해결책

나를 추가하는 경향이"_recurse"습니다.그래서"reverse_recurse".가 어디인지 나는습니다.내가 좋아 떠나는 사례가 기능으로 간단한 당신은 당신의 예입니다.하는 경향이 있다는"공공"함수를 사용한다는 사실 도우미 기능을 수행할 반복하는 것과는 무관하다.에서 javascript 가끔 너무 멀리 숨을 반복적인 기능을 통해밈을 만들기 위해,그것은 진짜로 명확하지 않을 것이라고 직접 있습니다.

다른 팁

헬퍼 기능을 원하는 모든 것을 호출 할 수 있으며, "글로벌"네임 스페이스에 도우미 기능을 넣지 않는 한 중요하지 않습니다. 단순히 "프라임"을 추가하는 것은 일반적인 관행 인 것 같습니다. :) 예 : Haskell에서,

reverse :: [a] -> [a]
reverse = reverse' []
    where reverse' :: [a] -> [a] -> [a]
          reverse' result [] = result
          reverse' result (x:xs) = reverse' (x:result) xs

나는 항상 "compute"와 함께 "do_compute"와 같이 do_를 사용합니다. 나는 그것이 행동을 수행하는 함수의 일부이기 때문에 매우 설명적인 반면, 호출되는 "컴퓨팅"은 외부 세계에 대한 간단한 설명 이름을 가져야한다.

나는 Shreevatsar에 동의합니다. 헬퍼 기능을 최상위 수준으로 만들지 않으면 (또는 더 나쁘게 내보내기 목록에 넣습니다), 그 이름이 무엇인지는 중요하지 않습니다. 나는 도우미 기능을 부르는 경향이 있습니다 f 그리고 g.

reverse :: [a] -> [a]
reverse = f []
  where
    f ys []     = xs
    f ys (x:xs) = f (x:ys) xs

나는 단지 작은 기능 에이 명명 체계를 사용합니다 (그렇지 않으면 나는 무엇을 모른다. f 을 참고하여). 그렇다면 다시, 왜 큰 기능을 작성하겠습니까?

그러나 다른 사람들에게 유용 할 수 있기 때문에 '도우미'기능을 내보내고 싶다면 다음과 같습니다.

reverseAccumulator

Haskell처럼 zip 그리고 zipWith. 그러나 나는 그 '도우미'기능을 부르지 않을 것입니다. zipWith 일반적인 기능 일뿐입니다 zip 기본 구현 (아마도 가장 많이 사용되는 구현)입니다.

또한 Shreevatsar에 동의합니다.이 예에서는 도우미를 개인 기능으로 만들 것입니다.

전체 모듈에서 보이기 기능을 보이려면 다른 경우에는 내보내지 않으면 '_'와 함께 기능을 접두사하는 경향이 있습니다. 물론, 명백한 수출 진술이 있지만 개발 중에는 GHCI의 대화식 탐사를 완화하기 위해 모든 기능을 수출하는 경향이 있습니다. 나중에 나는 내보낸 함수 목록을 추가하고 언더 보브를 사용하면 로컬이 될 수 있는지 여부를 쉽게 기억할 수 있습니다.

나는 사용한다 aux 또는 foo_aux (주요 기능의 경우 foo), 그리고 정의를 둥지로 외부 적으로 보이지 않도록하십시오.

설정 및 실행

예시:

function whateverSetup() { ... }
function whateverExecute() { ... }
라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top