[racket] modules: require and provide behaviour
Dear Matthias,
Thank you very much and apologies. It works fine now. While going
over your example, I noticed a typo in my code, I should have coded
(require "get-devanagari-page1.rkt") instead of (require
"get-devanagari-page.rkt") which was an older version where I didn't
enclose the GUI creation code in a procedure..
On Fri, Apr 20, 2012 at 5:13 PM, Matthias Felleisen
<matthias at ccs.neu.edu> wrote:
>
>
> 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
>