LINUX.ORG.RU

Прмер из DrRacket не запускается

 


0

1

Пример находится

https://docs.racket-lang.org/quick/

11. Objects

#lang racket
(require racket/class
         racket/gui/base)
(define f (new frame% [label "My Art"]
                      [width 300]
                      [height 300]
                      [alignment '(center center)]))

(define (add-drawing p)
  (let ([drawer (make-pict-drawer p)])
;;make-pict-drawer: unbound identifier in module in: make-pict-drawer
    (new canvas% [parent f]
                 [style '(border)]
                 [paint-callback (lambda (self dc)
                                   (drawer dc 0 0))])))

Что я промухал?

Ответ на: комментарий от monk
(require racket/class
         racket/gui/base/slideshow) вот так добавил

а это выплюнул

standard-module-name-resolver: collection not found
  for module path: racket/gui/base/slideshow
  collection: "racket/gui/base"
  in collection directories:
   /home/igor/.racket/6.1/collects
   /usr/share/racket/collects
   ... [146 additional linked and package directories] in: racket/gui/base/slideshowexception raised by error display handler: query-rows: no such table: modules; original exception raised: standard-module-name-resolver: collection not found
  for module path: racket/gui/base/slideshow
  collection: "racket/gui/base"
  in collection directories:
   /home/igor/.racket/6.1/collects
   /usr/share/racket/collects
   ... [146 additional linked and package directories]

saufesma
() автор топика
Ответ на: комментарий от monk

(require racket/class racket/gui/base slideshow)

А уменя (require racket/class racket/gui/base/slideshow) вот он и ругался

saufesma
() автор топика
Ответ на: комментарий от monk

Погоди

(add-drawing (pict+code (circle 10)))
. . pict+code: undefined;
 cannot reference an identifier before its definition

pict+code нужно определить

 (define pict+code что сюда впихнуть)

. define: bad syntax (missing expression after identifier) in: (define pict+code)

Как к этим модулям подобраться, чтоб разобраться, просто чтение не всегда срабатывает как ожидается

saufesma
() автор топика
Ответ на: комментарий от saufesma

У тебя же вверху по тексту она определена (в разделе 10):

(define-syntax pict+code
  (syntax-rules ()
    [(pict+code expr)
     (hc-append 10
                expr
                (code expr))]))

Ещё там (require slideshow/code) не забудь вернуть

monk ★★★★★
()
Ответ на: комментарий от monk

Этот учебник подразумевает, что уроки выполняются подряд в одной и той же среде.

monk ★★★★★
()
Ответ на: комментарий от monk
(define-syntax pict+code
  (syntax-rules ()    ;;<--- 
;;вот она, когда-то я так и не 
;;разобрался с этим, что и 
;;толкнуло меня использовать CL но без его макросистемы
    [(pict+code expr)
     (hc-append 10
                expr
                (code expr))]))
saufesma
() автор топика
Ответ на: комментарий от saufesma

вот она, когда-то я так и не разобрался с этим, что и

Здесь всё просто. После "(syntax-rules ()" пары [что-заменять на-что-заменять]. Здесь, например, пара одна:

[(pict+code expr)
     (hc-append 10
                expr
                (code expr))]

Соответственно, (pict+code (circle 10)) превращается в

(hc-append 10
           (circle 10)
           (code (circle 10)))

monk ★★★★★
()
Ответ на: комментарий от monk

Погоди

#lang racket
(require racket/class 
         racket/gui/base
         slideshow
         slideshow/code
         pict/flash)

(define-syntax pict+code
  (syntax-rules ()
    [(pict+code expr)
     (hc-append 10
                expr
                (code expr))]))

(define f (new frame% [label "My Art"]
                      [width 300]
                      [height 300]
                      [alignment '(center center)]))

(define (add-drawing p)
  (let ([drawer (make-pict-drawer p)])
    (new canvas% [parent f]
                 [style '(border)]
                 [paint-callback (lambda (self dc)
                                   (drawer dc 0 0))])))

вот такое выводит

> (add-drawing (pict+code (circle 10)))
(object:canvas% ...)
> (add-drawing (colorize (filled-flash 50 30) "yellow"))
(object:canvas% ...)

и ничего не рисует

saufesma
() автор топика
Ответ на: комментарий от monk

И ещё, выходит, что рисовать окошки ввода/вывода можно как-то и без (syntax-rules ()), то в других модулях без него не обойтись?

saufesma
() автор топика
Ответ на: комментарий от saufesma

Вывод не сделал

(send f show #t)

и всё рисуется.

saufesma
() автор топика
Ответ на: комментарий от saufesma

И ещё, выходит, что рисовать окошки ввода/вывода можно как-то и без (syntax-rules ()), то в других модулях без него не обойтись?

Всё можно делать без макросов. Но более многословно.

monk ★★★★★
()
Ответ на: комментарий от monk

Всё можно делать без макросов. Но более многословно.

Стоит задача, надо разработать алгоритм под задачу, а потом ещё и язык написать для решения задачи, не слишком ли это сложно? Хотя и не многословно.

saufesma
() автор топика
Ответ на: комментарий от saufesma

Макросы - это не язык. Проще их рассматривать как расширенные функции. Без функций можно реализовать алгоритм? Можно. Почти любой. Также и без макросов.

monk ★★★★★
()
Ответ на: комментарий от monk

Без функций можно реализовать алгоритм? Можно. Почти любой. Также и без макросов.

А в нижках то там то сям используются макросы, OnLisp, первая четверть книги с трудом понятна, а дальше я здулся. Да и примеры ракеты тоже густо посыпаны макросами.

А здесь он утверждает макросы это язык

https://www.youtube.com/watch?v=ygKXeLKhiTI&list=PL2VAYZE_4wRJi_vgpjsH75k...

Нужно видать ставить какую-то задачу и засучивать рукова.

saufesma
() автор топика
Ответ на: комментарий от saufesma

А здесь он утверждает макросы это язык

Так функции тоже язык. Вся разница лишь в том, что функции работают с значениями, а макросы с кусками кода. И то и то добавляет новые понятия, которые можно использовать в алгоритме.

monk ★★★★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.