2014-06-11 70 views
8

我學習Perl 6的和難以理解下面差()和[]在Perl 6

我Perl 6的Perl 6的一個班輪是rakudo-star: stable 2014.04 (bottled)

這工作得很好。該陣列/列表進行排序

[[email protected]:~] : perl6 -e 'say [2443,5,33, 90, -9, 2, 764].sort' 
-9 2 5 33 90 764 2443 

但這並不排序數組/列表中,如果[].sort作品爲什麼@s.sort不?

[[email protected]:~] : perl6 -e 'my @s = [2443,5,33, 90, -9, 2, 764]; @s.sort.say' 
2443 5 33 90 -9 2 764 

變化從[]()

[[email protected]:~] : perl6 -e 'my @s = (2443,5,33,90,-9,2,764); @s.sort.say' 
-9 2 5 33 90 764 2443 

注意在這個問題上所描述的行爲perl6的發行版本已經改變。請參見下面的G. Cito

+1

@ FranciscoZarabozo:Perl 6 *是* Perl;它只是不是Perl 5 – Borodin

+3

Perl6和Perl是不同的標籤。從語言角度看,Perl 5和Perl 6是完全不同的語言。我的編輯着重於刪除'perl'標籤並僅保留'perl6'。尋找'perl'標籤的人最有可能不在尋找Perl 6.爲了標記目的,'perl'不是'perl6','perl'是一個不相關的標籤。 –

+2

@FranciscoZarabozo: 我真的不希望這變成一個自我之戰,所以我會留下你來擺弄你的內容的標籤,但我強烈反對*「Perl 5和Perl 6是完全不同的「*。 Perl 6與其他語言相比,Perl 6更像Perl 5,但由於Perl 6早在主要版本號中聲明瞭它的聲明,因此Perl 5不得不繼續增加次要版本號。因此,Perl 5的版本10和版本20已經成爲Perl 6和Perl 7(如果它不包含障礙)。 – Borodin

回答

10

對於那些誰可以被這個答案所迷惑,問題是關於Perl 6的,並沒有這適用於Perl 5

聲明

my @s = [2443, 5, 33, 90, -9, 2, 764] 

創建一個逐項數組並將它分配給@s[0],所以@s只有一個元素,並且排序它毫無意義。

但是你可以

@s[0].sort.say 

其中有你所期望

+0

我也打印了@s [0]也被它困惑了,謝謝你的回答 –

+0

A succint explanation +1。在perl6中,列表和數組之間的區別變得更加明確,並且在某些方面更加「一致」(*即*對標量的賦值不會像perl5中那樣返回列表項的數量)。這個perl6功能幫助我瞭解perl5中列表與數組的精妙和成語構建能力。 –

+0

@Borodin [@Ask and Learn](http://stackoverflow.com/users/2681383/ask-and-learn)...已經有4年多了,但是至於perl6的Xmas版本,這已經發生了變化。可能是由於在巨大列表重構期間重新處理事情。 –

3

我要去無路可退,並參考一些CPAN的Perl6文檔的地方,這可能被視爲影響作爲list vs. array thing- a sequence of values而不是sequence of itemized values(見doc.perl6.org)。

當然perl6足夠不同,它保證其自己的標籤,但它仍然是perl所以這並不奇怪,()創建一個列表和[]創建一個匿名數組。

> say [2443, 5, 33, 90, -9, 2, 764].WHAT 
(Array) 
> say (2443, 5, 33, 90, -9, 2, 764).WHAT 
(List) 

由於這個問題首次提出和回答的行爲已經改變:

> my @s = [2443, 5, 33, 90, -9, 2, 764] 
> @s.sort.say 
(-9 2 5 33 90 764 2443) 

注意排序時的輸出是List但除此之外@sArray

> @s.sort.WHAT.say 
(List) 
> @s.WHAT.say 
(Array)