Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > LISP > [Scheme] функция принадлежности точки к области


Автор: MemphisMayFire 22.4.2011, 18:34
Нужно срочно дописать реферат по ФП, сделано все, кроме небольшой программе на lisp. 
В чем суть программы:
нужно проверить, попадает ли точка в заданную область, например:
функция circle, которая возвращает функцию от
 двух агрументов-координат, возвращающую истину, если точка с
 координатами x, y принадлежит области, и ложь в противном случае.
Использовать можно так:
 guile> (define c (circle 0 0 1))
 guile> (c 0.5 0.5)
 #t
 guile> (c 1 1)
 #f

есть код на си (мне нужно сравнить с объектно-ориентированным), если он чем поможет - могу кинуть.
Заранее спасибо!

Автор: Void 22.4.2011, 19:18
Код
(define (circle cx cy r)
    (lambda (x y)
        (<= (+ (expt (- cx x) 2) (expt (- cy y) 2)) (expt r 2))))

Автор: k0rvin 22.4.2011, 19:43
думаю для реферата лучше переформатировать в несколько строк, чтоб меньше шокировать количеством скобок на строку и четче отобразить структуру кода =)

как-нибудь так:
Код

(define (sqr x)
  (expt x 2))

(define (circle cx cy r)
  (lambda (x y)
    (<= (+ (sqr (- x cx))
           (sqr (- y cy)))
        (sqr r))))

Автор: MemphisMayFire 22.4.2011, 20:12
Что-то не очень понял как работает, привидите, пожалуйста, пример ввода)

Автор: k0rvin 22.4.2011, 20:54
Код

> (define c (circle 0 0 1))
> (c 0.5 0.5)
#t
> (c 1 1)
#f

Автор: MemphisMayFire 22.4.2011, 21:40
А, вроде все, спасибо всем большое!

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)