공통 목록 처리 기능 이름의 유래


11

목록 또는 배열에서 작동하기위한 일부 고차 함수가 반복적으로 채택되거나 재창조되었습니다. 함수 , 접기 [ l | r ] 및 필터 는 Scheme, ML 및 Python과 같이 공통 조상이없는 것으로 보이는 여러 프로그래밍 언어로 함께 발견됩니다. 질문에 집중하기 위해이 세 가지 이름을 사용하겠습니다.

이름이 보편적이지 않다는 것을 보여주기 위해 다음은 다른 언어로 된 동등한 기능에 대한 이름의 샘플입니다. C ++은 필터 대신 mapremove_if 대신 변환을 사용 합니다 (조건 자의 의미를 뒤집 음). 리스프가 mapcar 등등을 대신 지도를 , 제거-IF-하지 않고 필터감소 대신에 배는 (일부 현대 리스프는이 변형 지도를 하지만,이 나타납니다가 될 파생 된 형태 .) C #을 사용하는이 선택 대신 지도어디 대신필터 . C #의 이름은 LINQ 를 통해 SQL에서 왔으며 이름 변경에도 불구하고 그 기능은 Haskell의 영향을 받았으며 이는 ML의 영향을 받았습니다.

map , foldfilter 이름 은 널리 사용되지만 보편적이지 않습니다. 이것은 그들이 영향력있는 출처에서 다른 현대 언어로 빌려 왔다는 것을 암시합니다. 이 함수 이름은 어디에서 왔습니까?


10
map입력 변환에서 출력 범위까지의 "매핑"으로 세트 변환을 설명하는 수학적 세트 이론에서 나옵니다.
Aidan Cully

2
Lisp 's mapcar 에있는지도입니다 (cdr 대신).

접힌 이론에서 그것은 변태 (catamorphism)라고 불리기 때문에 그 이름을 얻었습니다. 그러나 그것은 절대적으로 우스운 일입니다. 또한 foldl은 LINQ에서 SQL 용어로 다시 집계됩니다.
Jimmy Hoffa

2
또한 그 언어에는 공식적으로 공통 조상이 없지만, 앞뒤로 많은 영향을 미쳤습니다. 귀도 반 로섬 (Guido van Rossum)은 파이썬 디자인을 시작할 때 숙제를했고 Scheme, Common Lisp, Perl 및 (IIRC) Haskell과 ML은 이미 당시에있었습니다.
tdammers

1
filter정확하게 수행합니다-데이터를 필터링합니다. 꽤 명백한 것 같습니다.
Dukeling

답변:


3

목록에서 유일한 보편적 단어는 1960 년 Lisp의 원본 논문에map 이미 나와 있습니다. 이 논문에는 (AKA , AKA )도 있습니다.maplistsearchfilterremove-if-not

나는 map다른 사람들이 변형을 가지고 있지만 그 이유 는 상대적으로 고대, 확립, 공통 및 초등 수학 map에서 비롯된 이유라고 생각 하지만 (AKA AKA & c)는 비교적 최근에 개발 된 (CS와 거의 또는 거의 동시에) 도메인 에서 비교적 고급 개념입니다. 그리고 Lisp에서 10 년 넘게 사용 되었을 때 (1980 년대 후반에) 소개되었습니다 .catamorphismreducefoldreduce

다른 사람들 ( filterAKA remove-if-not)은 CS / 프로그래밍에서 훨씬 더 특별하므로 사람들은 자신의 이름을 선택하는 것이 훨씬 편하다고 느꼈습니다.


1
범주 이론 을 "최근에 개발 된 불분명 한 도메인"이라고 모호하게 언급하지 말고 Lambda 미적분학 만큼 "최근에 개발 된"것 입니다.
Dan D.

@DanD : 핵심 단어는 상대적으로
SDS

그럼에도 불구하고 모두 .NET에서 버그를 일으켜 SQL과 비슷해졌습니다. (지도-> 선택; 필터-> 위치; 접기-> 집계)
Steven Evers
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.