2013-05-31 24 views
2

你會怎麼做在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); 
} 

但是,這顯然不是功能(是嗎?),因爲RegisterEntityType正在修改typeList。 (這是一個全球性的entityType_t

+1

有你不得不用額外的元素來重建整個列表,或者有一個反向的LinkedList在那裏你可以添加的元素添加到前面的功能鏈表。 – leppie

+1

如果你認真地對數據結構的函數式編程,你應該熟悉本 - http://www.cs.cmu.edu/~rwh/theses/okasaki.pdf - 如果你是不是已經。同一作者可以以書籍形式提供更精美的版本。 –

回答

1

你需要一個不同的功能,一般來講,

List AddItemToList(List list, Item item); 

因爲你應該返回添加了該項目新的列表,而無需修改原始列表。這涉及其他問題,例如應該需要垃圾收集器來跟蹤您要創建和放棄的中間列表。

我不認爲C是實現函數式編程技術最好的語言,你就必須創造一切從頭開始。顯而易見的理想選擇是純粹的函數式編程語言,或者至少是支持功能技術的編程語言,例如C++,C#或Python。

也許你想檢查此question

希望這(在某種程度上)幫助。