Using Ramda, and pointfree style, how can I copy the first item of an array to the end of it?

淺唱寂寞╮ 提交于 2019-12-20 04:38:18

问题


I want to take an array [1, 2, 3] and return [1, 2, 3, 1].

I'm using Ramda, and I can get the desired result like this:

const fn = arr => R.append(R.prop(0, arr), arr);

But I'd like to do it point-free. Here's the closest I've gotten:

const fn = R.compose(R.append, R.prop(0));

fn(arr)(arr)

But that looks silly. What am I missing? Thanks!


回答1:


converge can be very helpful for things like this.

const rotate = R.converge(R.append, [R.head, R.identity])
rotate([1, 2, 3]); //=> [1, 2, 3, 1]



回答2:


The S combinator is useful here:

S.S(S.C(R.append), R.head, [1, 2, 3]);
// => [1, 2, 3, 1]


来源:https://stackoverflow.com/questions/40026018/using-ramda-and-pointfree-style-how-can-i-copy-the-first-item-of-an-array-to-t

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!