2009-12-09 5 views
0

편집 : 내 질문은 원래 "목록의 목록을 평평하게하는 기능의 표준 이름이 있습니까? 단 한 단계 만 깊습니까?"하지만 Chuck의 대답은 내가 실제로 묻기를 원하는 것보다 훨씬 가깝기 때문에 이름을 변경했습니다. 그것. 그래도 세 가지 대답 모두 유용했습니다. 감사.목록 목록을 가져와 해당 목록의 내용을 포함하는 단일 목록을 반환하는 함수의 공통 이름이 있습니까?

'flatten'은 트리를 가져 와서 원자 목록을 작성하지만 깊숙이 중첩되어있는 함수에 대해서는 잘 받아 들여지는 이름 인 것처럼 보입니다.하지만 한 레벨 이후에 중지되는 함수는 무엇입니까? 그래서 (1 2 (3 4) (5 6)) (7 8))에 "일종의"(1 2 (3 4) (5 6) 7 8). "무언가"는 여러 언어/라이브러리에서 공통된 이름을 갖고 있습니까? 이 질문에

대답은 :

Flattening a shallow list in Python

는 '체인'좋은 생각이 될 수 있음을 시사하지만, "표준"있을 정도로 일반적이다?

답변

3

목록의 목록을 받아 하나의 목록을 반환 함수 (OCaml, F #, Haskell, Clojure)에서 "concat"이라고 불린다.

2

여기에는 표준 이름이 있는지 잘 모르겠습니다. 나는 3 다른 이름

3 다른 구현의 이름을 지정할 수 있습니다
  • 파이썬 : 체인
  • F # : CONCAT
  • LINQ : SelectMany
5

의 경우 괄호 안쪽 세트 목록을 삭제하면 concat이 매우 유명합니다. 좀 더 일반적인 함수 인 MMM을 모나드 M으로 병합하는 경우 종종 join이라고합니다. 추상 대수학에서는이 함수를 표준으로 µ이라고합니다.

0

Common Lisp에서는 올바른 유형 매개 변수를 사용하여 APPEND 또는 CONCATENATE를 적용 할 수 있습니다. APPEND의 결과는 하위 목록을 인수 목록과 공유합니다. CONCATENATE는 항상 사본을 작성하고 비 목록 순서에도 적용 할 수 있습니다.

+0

그러나 이들 중 둘 모두가 단일 목록에 포함되지 않고 개별 매개 변수로 합치기 위해 목록을 사용하지는 않습니까? 그래서 (할 수있다 (1 2) ((3 4) (5 6)) (7 8)) (1 2 (3 4) (5 6) 7 8)) ((3 4) (5 6)) (7 8)))은 ((1 2) ((3 4) (5 6)) – jtolle

+0

예. 그러나 APPLY에 _spreadable 인수 list_를 사용하거나 REDUCE를 사용하여 단계별로 수행 할 수 있습니다. – Svante

+0

오른쪽. 내가 무엇을 요구 했는가하는 것은 일반적인 이름이 (목록의 목록 추가) 또는 (목록의 목록 추가를 줄이는) 함수에 대한 일반적인 이름 일 것입니다. '연결', '연결'또는 '체인'모두가 그럴듯 해 보입니다. – jtolle