Scala DSL - Проста математика

Аз съм сравнително нов в Scala и се боря с DSL. В момента се опитвам да внедря прост математически DSL, който може да се използва с някакъв естествен език.

Моята идея:

print(Calculate 4 plus 6)=> returns 10

print(Calculate 4 mins 2)=> returns 2 ... and so on

Досега съм внедрил два класа. Основният клас, който служи само за извикване на метода и клас за изчисление. Моят проблем е, че нямам идея как мога да предам първото число на изчислителния обект, защото не е позволено да се дефинират параметри.

Може ли някой да помогне с пример или нещо подобно?


person Hellekin    schedule 14.04.2014    source източник


Отговори (1)


Ще се сблъскате с някои проблеми, правейки това да се почувства като естествен език, тъй като естествената форма, която Scala иска да анализира, е class-instance method argument method argument method argument ..., което е доста различно от английския.

Въпреки това, тук е рамка, за да започнете, с много допълнителен шаблонен синтаксис, за да направите анализирането правилно.

object Now {
  class Value(val please: Double) {
    def plus(d: Double) = new Value(please + d)
    def minus(d: Double) = new Value(please - d)
    override def toString = please.toString
  }
  def calculate(d: Double): Value = new Value(d)
}

И ето, че работи (след import language.postfixOps):

scala> Now calculate 4 plus 6 please
res1: Double = 10.0

Между другото, вече има много добър естествен начин да поискате 4+6...това е 4+6. Работи за говорещи много различни езици, както и за почти всички компютърни езици. Така че този DSL може да е забавен като играчка, но не съм сигурен каква е практическата полза.

person Rex Kerr    schedule 14.04.2014
comment
Можете да го наречете учтива аритметика, въпреки че лично аз предпочитам да възприема диктаторски подход към работата с компютрите... - person Randall Schulz; 15.04.2014
comment
Хей, благодаря за помощта! Всъщност беше само за практически цели =). Знаете ли някакви по-подходящи, но прости DSL, с които да започнете? - person Hellekin; 15.04.2014
comment
@user3042626 - ScalaTest има много подобен на английски DSL. - person Rex Kerr; 15.04.2014