WReach의 대답에 동의하지 않습니다. 불일치가 어디에서 왔는지 확인하기 위해 그의 대답을 조금 분해 해 보겠습니다.
첫째, 그의 코드 :
function allOdd(words) {
var result = true;
for (var i = 0; i < length(words); ++i) {
var len = length(words[i]);
if (!odd(len)) {
result = false;
break;
}
}
return result;
}
과
function allOdd(words) {
return apply(and, map(compose(odd, length), words));
}
가장 먼저 주목해야 할 것은 그가 합병하고 있다는 것입니다.
반복적 스타일 프로그래밍이 일반적인 기능적 스타일보다 더 명시적인 제어 흐름을 가질 수있는 능력이 없습니다.
이것에 대해 빨리 이야기합시다.
표현 중심 스타일은 가능한 한 사물 을 사물로 평가 하는 스타일입니다 . 함수형 언어는 표현에 대한 사랑으로 유명하지만 실제로는 조합 가능한 표현 없이도 함수형 언어를 가질 수 있습니다. 표현 이 없는 문장 만 만들어 보겠습니다 .
lengths: map words length
each_odd: map lengths odd
all_odd: reduce each_odd and
이것은 함수가 명령문과 바인딩의 체인을 통해 순전히 연결된다는 점을 제외하면 이전에 제공된 것과 거의 동일합니다.
반복자 중심의 프로그래밍 스타일은 Python이 취하는 스타일 일 수 있습니다. 순전히 반복적 인 반복자 중심 스타일을 사용하겠습니다 .
def all_odd(words):
lengths = (len(word) for word in words)
each_odd = (odd(length) for length in lengths)
return all(each_odd)
각 절은 반복적 인 프로세스이고 스택 프레임의 명시 적 일시 중지 및 재개에 의해 함께 묶여 있기 때문에 이것은 작동하지 않습니다. 구문은 기능적 언어에서 부분적으로 영감을받을 수 있지만 완전히 반복적 인 구현에 적용됩니다.
물론 이것을 압축 할 수 있습니다.
def all_odd(words):
return all(odd(len(word)) for word in words)
명령형은 지금 그렇게 나쁘게 보이지 않습니까? :)
마지막 요점은보다 명확한 제어 흐름에 관한 것입니다. 이것을 사용하기 위해 원래 코드를 다시 작성해 보겠습니다.
function allOdd(words) {
for (var i = 0; i < length(words); ++i) {
if (!odd(length(words[i]))) {
return false;
}
}
return true;
}
반복기를 사용하면 다음을 수행 할 수 있습니다.
function allOdd(words) {
for (word : words) { if (!odd(length(word))) { return false; } }
return true;
}
그래서 입니다 차이가 사이 인 경우 함수형 언어의 요점은 :
return all(odd(len(word)) for word in words)
return apply(and, map(compose(odd, length), words))
for (word : words) { if (!odd(length(word))) { return false; } }
return true;
함수형 프로그래밍 언어의 주요 특징은 일반적인 프로그래밍 모델의 일부로 변이를 제거한다는 것입니다. 사람들은 종종 이것을 함수형 프로그래밍 언어가 명령문이 없거나 표현식을 사용하지 않는다는 것을 의미하지만 이것은 단순화입니다. 기능적 언어는 명시 적 계산을 행동 선언으로 대체 한 다음 언어가 감소를 수행합니다.
이 기능의 하위 집합으로 자신을 제한하면 프로그램의 동작에 대해 더 많은 보증을받을 수 있으며이를 통해보다 자유롭게 구성 할 수 있습니다.
기능적 언어가있는 경우 새 함수를 만드는 것은 일반적으로 밀접하게 관련된 함수를 구성하는 것만 큼 간단합니다.
all = partial(apply, and)
함수의 전역 종속성을 명시 적으로 제어하지 않은 경우 간단하지 않거나 가능하지 않을 수도 있습니다. 함수형 프로그래밍의 가장 큰 특징은보다 일반적인 추상화를 지속적으로 생성 할 수 있고 더 큰 전체로 결합 될 수 있다는 신뢰입니다.