2016-07-29 4 views
1

Haskellはリストに項目を付加する:機能を提供する:CoffeeScriptの短所(:)

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

例:

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

そのような機能/操作者はCoffeeScriptのために存在しますか?

+0

JavaScriptがアンシフトあり、多分CoffeeScriptのもありか? –

+0

いいえ、同じ目的を達成するための2つの提案があります(unshiftに加えて):1. [2] .concat([3])のように '.concat'への連鎖呼び出し。concat([4])=> [2,3,4] '**または**それをサポートしている環境で使用している場合、あなたのcoffeescript(ES 6のみ)に以下の生のJavaScriptのようなものを注入することができます' var list = [2,3,4 ]; var ints = [1、...リスト]; '。私はcoffeescriptの普及した演算子がこれのように働くとは思わない。 –

+0

javascriptにコンパイルされた言語が必要で、非常に軽い場合は[purescript](http://www.purescript.org)に[Lists](https://github.com/purescript/purescript)があります-lists)、haskell以外は厳密なセマンティクスを持っていることに注意してください – epsilonhalbe

答えて

1

私が知る限り、CoffeeScriptはHaskellのようなリストを実装していません。 最も近い方法/機能は、元のリストを維持しながらArray.unshiftは、既存の配列を変更し、一方、しかし、Haskellの関数consは、新しいリストを作成Array unshift method

あるので、彼らは実際には同じ ものではありません。

はCoffeeScriptの中にリンクされたリストの数の実装、あります。例えば:

example 2が、私はネイティブのCoffeeScriptでサポートされて何も表示されません。

1

ネイティブのunshiftメソッドのほうが、結果の配列の長さが返されますが、配列自体はではなくであるため、チェーンを呼び出すことはできません。より正確には、それが配列の最初の要素を取り除き、右に2つの要素を追加し

array = [ 1, 2, 3 ] 

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

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

:既存のアレイに価値を付加するために使用することができる楽しい代替、CoffeeScript's ranges feature allows splicingとして

(あなたの望みの前置詞と元の0値)を割り当てます。

私たちも括弧でそれをラップし、配列の参照変数を持ち込むことによって、それをチェーンすることができます

array = [ 1, 2, 3 ] 

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

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