Учу потихоньку Racket. Раньше был такой код для вычисления дискриминанта:
(define (дискриминант a b c)
(define bandb (* b b))
(define fac ( * 4 a c))
(- bandb fac))
И сам код для решения квадратного уравнение:
(define (квадратное_уравнение a b c)
(define d (дискриминант a b c))
(cond
[(> 0 d)
(print "Квадратное уравнение не имеет корней""")]
[(equal? d 0)
(/ ( - b) (* 2 a))]
[(> d 0)
(print "D:""")
(println d)
(print "X1"":")
(println ( / ( + (- b) (sqrt d)) ( * 2 a)))
(print"\n""X2:")
(/ ( - ( - b) ( sqrt d)) ( * 2 a))]))
(квадратное_уравнение -1 2 3) ;выводит 16 как и полагается
Теперь решил попробовать написать такую же решалку, только с использованием lambda:
#lang racket
(define (напечатать text)
(println text))
(define two.x
(lambda (a b c d)
(( / ( + (- b) (sqrt d)) ( * 2 a)))
(/ ( - ( - b) ( sqrt d)) ( * 2 a))))
(define x.one
(lambda (a b)
(/ ( - b) ( * 2 a))))
(define дискриминант
(lambda (a b c)
(let ([f 4])
(define b.sqrt (* b b))
(define four.a.c ( * f a c))
(- b.sqrt four.a.c))))
(define квадратное_уравнение
(lambda (a b c)
(let ([D (дискриминант a b c)])
(cond
[(> 0 D)
(напечатать "Квадратное уравнение не имеет корней")]
[(equal? D 0)
(x.one a b)]
[( > D 0)
(two.x a b c D)]))))
Но получаю данную ошибку:
. . application: not a procedure;
expected a procedure that can be applied to arguments
given: -1
arguments...: [none]
P.S Дискриминант вычисляется
P.S.S gist кода для решения уравнений: url