2013-05-31 2 views
2

C에서 어떻게 기능적으로 순수한 링크 된 목록을 작성 하시겠습니까? 내가하고있는 링크드리스트인가? 개체 목록을 가지고 노력하고 있지만 외부 상태를 수정하지 않고 함수에서 목록에 항목을 추가하는 방법을 생각할 수 없습니다.링크 된 목록을 사용하는 C의 기능 프로그래밍

는 기본적으로 내가이 원하는 :

void AddItemToList(Item item);

가 추가되는 내용 목록에 대해 걱정할 필요 호출하지 않고, 어디에서 호출 할 수 있으려면.

void AddTypeToList(entityType_t *type, entityType_t *listHead) 
{ 
    type->next = listHead; 
    listHead = type; 
} 

void RegisterEntityType(entityType_t *type) 
{ 
    AddTypeToList(type, typeList); 
} 

을하지만 이것은 분명히 작동하지 않습니다 (또는입니까?) RegisterEntityTypetypeList를 수정하기 때문에 :

은 지금은 단지 있습니다. 원래 목록을 수정하지 않고, 항목이 추가 된 새 목록을 반환해야하기 때문에

+1

기능 링크드 목록을 만들려면 여분의 요소로 전체 목록을 재구성하거나 요소를 맨 앞에 추가 할 수있는 역 링크 목록이 있어야합니다. – leppie

+1

데이터 구조에 대한 함수 적 프로그래밍에 대해 진지하게 생각하고 있다면 http://www.cs.cmu.edu/~rwh/theses/okasaki.pdf에 익숙해야합니다. 더 세련된 버전은 동일한 저자 인 책 형태로 제공됩니다. –

답변

1

(글로벌 entityType_t 인) 당신은, 일반적으로 말해서,

List AddItemToList(List list, Item item); 

을 다른 기능을 필요 했어. 여기에는 생성 및 폐기하려는 중간 목록을 추적하기 위해 가비지 수집기가 필요하다는 것과 같은 다른 질문이 포함됩니다.

C가 함수 프로그래밍 기술을 구현하는 데 가장 좋은 언어라고 생각하지 않습니다. 처음부터 모든 것을 빌드해야합니다. 명확하고 이상적인 선택은 순수한 함수형 프로그래밍 언어이거나 최소한 C++, C# 또는 Python과 같은 기능 기술을 지원하는 프로그래밍 언어 일 것입니다.

아마도 이것을 확인하고 싶습니다. question.

희망 (도움)이 도움이됩니다.

관련 문제