모든 코드를 일련의 맵 / 필터 / 감소 작업으로 나타낼 수 있습니까?


16

최근에 큰 코드 덩어리를 리팩토링하고 Linq 쿼리로 대체했습니다.

언어 바이어스 제거-Linq는 기본적으로 일련의 데이터에서 작동하는 일련의 맵 / 필터 및 감소 작업입니다.

이것은 내가 이론적으로 이것을 얼마나 멀리 할 수 ​​있을까 생각하게했다. 전체 코드베이스를 일련의 (또는 단일) 맵 / 필터 및 축소 작업으로 다시 작성할 수 있습니까?

불행히도 유용한 작업을 수행하기 위해 돈을 지불하기 때문에 더 이상 실험을 할 수 없었지만 재구성 할 수없는 코드 구조는 생각할 수 없습니다. 부작용 코드는 모나드를 통해 처리 할 수 ​​있습니다. 출력조차도 기본적으로 메모리 주소를 화면 주소에 매핑합니다.

Linq 쿼리로 (이론적으로) 다시 쓸 수없는 것이 있습니까?


: 나무는 여기를 참조하십시오 stackoverflow.com/questions/250377/...
blueberryfields

나는 항상 "감소"가 튜링 완료를 보장하기에 충분하다고 생각했다. Linq에 대한 구현이 기능적 구현을 ​​얼마나 가깝게 따르는 지 확신 할 수 없습니다.
블루 베리 필드

1
나는 모른다. 그러나 대략적인 경험의 규칙은 누구나 자신의 모든 코드를 작성하는 것을 고려할 때 튜링이 완료된다는 것입니다. 그러나 튜링을 완료하는 것은 그리 흥미롭지 않습니다.
psr

1
나는 psr에 동의합니다. 이 질문에 대한 올바른 답변은 Turing 완전성을 해결해야한다고 생각합니다. 증거는 이러한 작업 만 사용하여 튜링 머신을 구현하려고 시도 할 수 있습니다.
Rob

유휴 생각 : 우리가 넌센스와 같은 것을 허용하더라도 my_list.map(_ignored => a copy of my_list), 프로그램의 공간 사용은 프로그램 길이에 따라 다항식에 의해 제한되는 것처럼 보입니다. 그런 언어는 확실히 PSPACE에없는 문제를 계산할 수 없었습니다. 그러나 PSPACE의 많은 문제가 다루기 힘든 것으로 여겨지므로 더 큰 클래스는 말할 것도 없습니다. 이는 심각한 제한이 아닐 수 있습니다.

답변:


1

이것을 기능 프로그래밍이라고하며 많은 사람들이 기본 개념으로 간주합니다. Joel On Software 에 대한 좋은 소개가 있습니다. 더 기술적 인 대답은 '아니오'입니다. SKI 미적분을 통해 대답 할 수없는 컴퓨터 질문을 (잘 정의 된 방식으로) 묻는 현재 알려진 방법은 없습니다.


1
거기 까지 기능보다 더 많은 기능을 프로그래밍 map, filter그리고 reduce(우리는 튜링 완전성을 무시하고 실제 FP 언어를 사용하는 경우이 세 번 간다). 사실, 그것들은 다소 일반적이어서 일반적으로 유용하지만 실제로는 매우 간단한 함수형 프로그래밍 응용 프로그램입니다. 최소한의 람다 미적분은 다른 방식이 아닌 다른 많은 것들 중에서 이러한 기능을 정의 할 수 있습니다.

"여기에 Joel On Software에 대한 좋은 소개가 있습니다."-Fortran을 Basic과 혼동 할 수 있으므로 다른 사실에 대해서는 신뢰하지 않습니다.
quant_dev
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.