Я буду использовать простой пример, чтобы проиллюстрировать мой вопрос. В Java, C или любом другом языке ООП я мог бы создать класс pie
способом, подобным следующему:
class Apple{
public String flavor;
public int pieces;
private int tastiness;
public goodness(){
return tastiness*pieces;
}
}
Какой лучший способ сделать это со Схемой? Я полагаю, я мог бы сделать что-то вроде этого:
(define make-pie
(lambda (flavor pieces tastiness)
(list flavor pieces tastiness)))
(define pie-goodness
(lambda (pie)
(* (list-ref pie 1) (list-ref pie 2))))
(pie-goodness (make-pie 'cherry 2 5))
;output: 10
... где вишня - это вкус, 2 - это кусочки, а 5 - вкус. Однако тогда нет никакой безопасности типов или видимости, и все просто помещено в немаркированный список. Как я могу улучшить это?
Sidenote: процедура make-pie ожидает 3 аргумента. Если я хочу сделать некоторые из них необязательными (как я мог бы сделать в языках с фигурными скобками, таких как Java или C), целесообразно ли просто принимать аргументы в виде списка (то есть обрабатывать аргументы как список - не требуется ли один аргумент, который является списком) и обрабатывать их таким образом?
Обновление:
Я получил пару ответов со ссылками на различные расширения / библиотеки, которые могут удовлетворить мою потребность в ООП в схеме. Это полезно, так что спасибо.
Однако, хотя я, возможно, и не сообщил об этом хорошо, мне также интересно, как лучше реализовать описанный выше объект pie
без таких классов или библиотек, чтобы я мог лучше понять лучшие практики схем.