Трета задача

  1. Примери как трябва да работи #derive: Expr.parse('x * x').derive(:x) => Expr.parse('x + x') Expr.parse('2 * x + 3 * y').derive(:y) => Expr.parse('3') Expr.parse('sin(x)').derive(:x) => Expr.parse('cos(x)') Т.е. #derive трябва да връща каквото връща #parse (каквото връща и #build).

    И понеже "резултатът трябва да е опростен със #simplify", значи и #simplify връща каквото връща #parse, доколкото мога да съобразя от втория пример.

    Относно #evaluate, резултатът е число, съгласно: Expr.parse('x * 2 + y').evaluate(x: 3, y: 4) # => 10

  2. Аз имам въпрос за Expr#simplify - x + x до 2 * x ли се опростява или се приема, че не може да се опрости? А и x + 2*x до 3 * x ли се опростява?

    Освен това за Expr#== сравнява опростените изрази или самите изрази. Например

    Expr.parse('x * 2') == Expr.parse('x + x')
    

    true или false е?

  3. Моето виждане:
    Условието за #derive гласи:
    "Резултатът трябва да е опростен със #simplify".
    От друга страна единия от примерите за работата на #derive е следният: Expr.parse('x * x').derive(:x) => Expr.parse('x + x') Т.е. x + x е опростен израз, понеже е бил обработен със #simplify. По тази логика и x + 2 * x би трябвало да не се нуждае от опростяване.

    Относно #==, ето какво гласи условието: "Изразите се сравняват символично."
    И понеже x * 2 и x + x не изглеждат по един и същи начин, следва Expr.parse('x * 2') == Expr.parse('x + x') да се оцени до false.

  4. В подкрепа на горното, миналата сряда, когато говорихме за задачата, имаше пример с производната на x * x * x, която се получава в особено красивия вид x * x + x * (x + x) или друг подобен и еднакво красив, и беше казано, че не се очаква да я опростяваме. Но, ако имаш желание, никой няма да ти се разсърди :wink:

Трябва да сте влезли в системата, за да може да отговаряте на теми.