Haskell的Javascript中缀运算符

时间:2012-07-20 00:06:55

标签: javascript haskell functional-programming

Javascript中是否有等效的构造。如果没有,你会如何创建一个?

以下是对中缀运算符在Haskell中所做的简单解释:

What does the : infix operator do in Haskell?

3 个答案:

答案 0 :(得分:4)

JavaScript没有列表类型,但它有Array s。

你可以使用......

var newArr = [val].concat(arr);

或者,您可以使用unshift()作为数组的前置,但它会改变原始数据。

JavaScript没有:运算符,运算符重载或类似于运算符的方法,因此您无法获得与Haskell类似的语法。

答案 1 :(得分:2)

我看到Leila Hamon已经与this article on emulating infix operators in JS挂钩了。

但我认为一个例子可能对其他人有用。

以下是如何破解NumberBoolean原型来处理链接的中缀表达式,例如4 < 5 < 10

您可以通过将更多方法应用于更多原型来进一步扩展这一点。它有点丑陋,但可能有助于使查询更简洁。

//Usage code
(4) .gt (6) .gt (4) //false

(100) .lt (200) .lt (400) . gt(0) . gt(-1)//true

(100) [ '>' ] (50) [ '<' ] (20)//false



//Setup Code
(function(){

  var lastVal = null;


  var nP = Number.prototype
  var bP = Boolean.prototype

  nP.gt = function(other){
    lastVal = other;
    return this > other;
  }

  nP.lt = function(other){
    lastVal = other;
    return this < other;
  }

  bP.gt = function(other){
    var result = lastVal > other;
    lastVal = other;
    return result;
  }

  bP.lt = function(other){
    var result = lastVal < other;
    lastVal = other;
    return result;
  }

  bP['<'] = bP.lt
  bP['>'] = bP.gt
  nP['<'] = nP.lt
  nP['>'] = nP.gt


})()

答案 2 :(得分:0)

这不是最漂亮的,但它可能有助于你想要中缀的地方的可读性,所以你的代码读起来像散文

function nfx(firstArg, fn, secondArg){
    return fn(firstArg, secondArg);
}

// Usage

function plus(firstArg, secondArg) {
    return firstArg + secondArg;
}

nfx(1, plus, 2);