閱讀LearnYouSomeErlang時,我發現cons運算符用於獲取列表的第一個元素。關於這是如何工作的,我有點困惑,因爲在本書的前面他提到了使用cons運算符將元素添加到列表中。缺點運算符「|」在Erlang
該函數返回列表的第一個元素。
head([H|_]) -> H.
在本頁找到http://learnyousomeerlang.com/syntax-in-functions。
有人可以解釋這是如何工作的返回列表的第一個元素。
閱讀LearnYouSomeErlang時,我發現cons運算符用於獲取列表的第一個元素。關於這是如何工作的,我有點困惑,因爲在本書的前面他提到了使用cons運算符將元素添加到列表中。缺點運算符「|」在Erlang
該函數返回列表的第一個元素。
head([H|_]) -> H.
在本頁找到http://learnyousomeerlang.com/syntax-in-functions。
有人可以解釋這是如何工作的返回列表的第一個元素。
cons運算符可用於模式匹配列表。所以一個列表可以被模式匹配到[H|T]
,它將解構列表,H
是列表的第一個元素,T
是列表的其餘項。
因此,操作者缺點是既用於模式匹配並且還構造列表。結構例如是X = [1|[2,3]]
。
我不知道這是否會是有用的,但是......
一個利弊細胞描述一對的第一個元素是某種形式的長期,第二個是一個指向另一個cons單元格(或者如果在列表末尾則爲null)。所以,如果你讓我用「 - >」爲指針符號,代表一個元素的列表,一個簡單的利弊細胞可能是,
[1, -> null] = the list [1].
[2, -> [1,-> null]] = the list [2,1], etc.
列表可以被看作缺點細胞的鏈表其中Cons單元格的第二個元素是指向下一個鏈接的指針。
甲缺點操作者通過創建一個缺點細胞,其中所述第一元件是一個新的列表元素和第二個元素是一個指針,指向原始列表的第一個缺點細胞創建一個新的列表。第一元件是頭,和第二元件(尾)是指針下一個缺點細胞在「鏈」。 Erlang中,上述可被寫爲
[2 | [1 | []]]
這是列表[2,1]。作爲短手,[1 | []]寫爲[1],因此
現在[2|[1|[]]] = [2|[1]]=[2,1]
,如果我的列表是[1,2,3],我可以代表它作爲它的頭缺點 - 版用尾巴如,
[1|[2,3]
所以,因爲Erlang是真棒,這種模式是可用的,以匹配如:「我有一個列表,[1,2,3],它被描述爲一缺點-ED HD和尾(的指針列表的其餘部分的HD)所以
[Hd|Tail] = [1,2,3]
給人
Hd = 1
和
Tail = [2,->[3,->null]] = [2|[3|[]]] = [2|[3]] = [2,3].
請注意,cons的第二個元素並不嚴格地必須是一個列表。 '[1 | {}]'是完全有效的單元格使用情況(如[1 | 2])。這些都不是正確的列表,但都會回答'is_list'。只是不得不把這個問題更多地混淆...... :-) – 2011-12-26 19:31:00
實質上這只是下降的尾巴變成_,未使用的變量。 – Tommy 2016-02-02 01:57:11