2016-07-29 15 views
1

Haskell bietet die : Funktion ein Element in einer Liste vorangestellt wird:Nachteile (:) in CoffeeScript?

*Main> :t (:) 
(:) :: a -> [a] -> [a] 

Beispiel:

*Main> 1 : 2 : 3 : [] 
[1,2,3] 

Gibt es eine solche Funktion/Operator gibt es für Coffeescript?

+0

JavaScript unshift hat, vielleicht auch Coffee hat? –

+0

Nein, aber ich habe zwei Vorschläge (zusätzlich zur Aufhebung der Verschiebung), um das gleiche Ziel zu erreichen: 1. Aufrufe von '.concat 'wie in' [2] .concat ([3]). Concat ([4]) => [2,3,4] '** oder ** wenn du in einer Umgebung verwendest, die es unterstützt, kannst du etwas wie das folgende rohe JavaScript mit Backticks in dein coffeescript einfügen (nur ES 6)' var list = [2,3,4 ]; var ints = [1, ... liste]; '. Ich denke nicht, dass der Spread-Operator von coffeescript so funktionieren wird. –

+0

Wenn Sie nur eine Sprache benötigen, die zu Javascript kompiliert und ziemlich leicht ist, gibt es immer [purescript] (http://www.purescript.org), das [Listen] hat (https://github.com/purescript/purescript -listen), beachten Sie, dass außer Haskell es strenge Semantik hat – epsilonhalbe

Antwort

1

Soweit ich das beurteilen kann, implementiert CoffeeScript keine Haskell-ähnlichen Listen. Die nächste Methode/Funktion ist die Array unshift method

jedoch die Haskell Nachteile Funktion eine neue Liste erstellt, während der ursprüngliche Liste zu bewahren, während Array.unshift ein vorhandenes Array modifiziert, so dass sie wirklich nicht die gleiche Sache.

Es gibt eine Reihe Implementierungen von verknüpften Listen in Coffeescript, z.B .:

aber ich sehe nichts nativ von Coffeescript unterstützt.

1

Ich würde zweite die native unshift Methode - obwohl sie die Länge des resultierenden Array zurück, nicht das Array selbst, so kann man nicht Kette Anrufe, wie Ihr Beispiel zeigt.

Als Spaß Alternative CoffeeScript's ranges feature allows splicing, die verwendet werden könnten, um einen Wert zu einem vorhandenen Array vorangestellt wird:

array = [ 1, 2, 3 ] 

array[..0] = [ 4, array[0] ] 

console.log array # [ 4, 1, 2, 3 ] 

Genauer gesagt, entfernt es das erste Element des Arrays und fügt die beiden Elemente auf der rechten Seite - Handseite der Aufgabe (Ihr gewünschter Vorgänger und der ursprüngliche 0-Wert).

Wir sogar Kette, indem sie sie in Klammern Verpackung und in den Array-Referenzierung Variable bringen:

array = [ 1, 2, 3 ] 

((array[..0] = [ 4, array[0] ]) and array).unshift(5) 

console.log array # [ 5, 4, 1, 2, 3 ]