[racket] modules: require and provide behaviour

From: Harry Spier (vasishtha.spier at gmail.com)
Date: Fri Apr 20 17:43:51 EDT 2012

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
>


Posted on the users mailing list.