[racket] modules: require and provide behaviour
This works fine for me:
#lang racket/load
(module a racket/gui
(provide get-devanagari-page)
(define (get-devanagari-page)
(define main-ocr-frame (new frame%
[label "DEVANAGARI OCR"]
[width 10000]
[height 10000]))
;Main title
(define title (new message%
[parent main-ocr-frame]
[label "DEVANAGARI OCR PROJECT"]
[font (make-object font% 20 'modern 'normal 'bold)]))
; Display main window
(send main-ocr-frame show #t)
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;Display message-box allowing user to continue or exit program
(when (equal? 'no (message-box
"CONVERT PAGE TO DEVANAGARI"
"Do you want to continue? "
main-ocr-frame ;parent
'(yes-no))) ;style
(exit))
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;If continuing then display a get file dialog to get devanagari-page
; which is a page of devanagari text to OCR.
(get-file
"Get Devanagari input file"
main-ocr-frame
"C:\\Users\\Harry\\OCR_PROJECT\\DEVANAGARI_PAGE_IMAGES"
"devanagari_page_3.gif"
#f
null
'(("Any" "*.*") ("Common graphics jpg and gif" "*.jpg;*.gif")
("JPEG *.jpg" "*.jpg") ("GIF *.gif" "*.gif")))))
(module b racket/gui
(require 'a)
(get-devanagari-page))
(require 'b)
Can you modify this somewhat simplified code to exhibit the problem with applying (get-devanagari-page)?
On Apr 20, 2012, at 5:01 PM, Harry Spier wrote:
> Dear list members,
>
> Perhaps someone could explain this "module,require and provide" behaviour.
>
> I've created a Racket module that provides a procedure that creates a
> simple GUI dialog to return a file path and another module that uses
> the procedure.
>
> The module to create the GUI is:
>
>
> #lang racket/gui
> ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
> ;;
> ;; This module displays a gui file dialog
> ;; to return a page of devanagari text for
> ;; testing.
> ;;
> ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
>
> (provide get-devanagari-page)
>
> ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
> ;Define and display top level window
> ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
> (define (get-devanagari-page)
> (define main-ocr-frame (new frame%
> [label "DEVANAGARI OCR"]
> [width 10000]
> [height 10000]))
>
>
> ;Main title
> (define title (new message%
> [parent main-ocr-frame]
> [label "DEVANAGARI OCR PROJECT"]
> [font (make-object font% 20 'modern 'normal 'bold)]))
>
> ; Display main window
> (send main-ocr-frame show #t)
>
> ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
>
> ;Display message-box allowing user to continue or exit program
> (when (equal? 'no (message-box
> "CONVERT PAGE TO DEVANAGARI"
> "Do you want to continue? "
> main-ocr-frame ;parent
> '(yes-no))) ;style
> (exit))
>
> ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
>
>
> ;If continuing then display a get file dialog to get devanagari-page
> ; which is a page of devanagari text to OCR.
>
> (get-file
> "Get Devanagari input file" ;title
> main-ocr-frame ;parent
> "C:\\Users\\Harry\\OCR_PROJECT\\DEVANAGARI_PAGE_IMAGES" ;start directory
> "devanagari_page_3.gif" ;default filename
> #f ;default extension
> null ;style - on Windows null means use native window style,
> ; '(common) means use platform independent style
> '(("Any" "*.*") ("Common graphics jpg and gif" "*.jpg;*.gif")
> ("JPEG *.jpg" "*.jpg") ("GIF *.gif" "*.gif"))
> ))
> -------------------------------------------
> ------------------------------------------
> When I type
>> (get-devanagari-page)
> in the interactions window everything works fine and the window and
> dialogs display and behave correctly.
>
> BUT in following module which requires the above module, for it to
> work I need to code "get-devanagari-page" NOT (get-devanagari-page)
>
> I.e this works and returns a file path.:
>
> Module get-devanagari-page.rkt
> -----------------
> #lang racket/gui
> (require "imagemagick_interface.rkt")
> (require "get-devanagari-page.rkt")
> get-devanagari-page
> ----------------------------
>
> BUT the following displays the gui and executes but gives an
> error:procedure application: expected procedure, given:
> #<path:C:\Users\Harry\OCR_PROJECT\DEVANAGARI_PAGE_IMAGES\devanagari_page_3.gif>
> (no arguments)
>
> Module main.rkt
> -------------------
> #lang racket/gui
> (require "imagemagick_interface.rkt")
> (require "get-devanagari-page.rkt")
>
> (get-devanagari-page)
>
> ---------------------------
> It appears to me that coding "get-devanagari-page" in module
> "main.rkt" causes procedure "get-devanagari-page" to be applied. Can
> someone explain to me why in that case it is applied and it doesn't
> just return #<procedure:get-devanagari-page> without being applied as
> it does when typed in the interactions pane.
>
> Thanks,
> Harry Spier
> ____________________
> Racket Users list:
> http://lists.racket-lang.org/users