[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: question about DrScheme
The error message is what you would get for doing this:
('(+ (4) (* (3) (2))))
It happened in line 102. I haven't thoroughly read your program but the '+'
is a symbol and not an procedure, you cannot 'apply' it.
wil
----- Original Message -----
From: "Chuen Ching" <tjioe@elang.stts.ac.id>
To: <matthias@rice.edu>
Cc: <plt-scheme@fast.cs.utah.edu>
Sent: Friday, May 25, 2001 4:18 PM
Subject: Re: question about DrScheme
> Hi, thanks for the responds.
> I don't know I should ask this questions to you or not, but in case if
> there is any of you who know the answer. I am trying to run this program,
> the infix to prefix artihmatic parsing, but it can't work. This is what
> happenned :
> > (parse '(4 + 3 * 2))
> procedure application: expected procedure, given: (+ (4) (* (3) (2))) (no
> arguments)
>
> Is there any of you know why ? Below is the complete listing program :
>
> (define word?
> (let ((number? number?)
> (symbol? symbol?)
> (string? string?))
> (lambda (x)
> (or (symbol? x) (number? x) (string? x)))))
> (define whoops
> (let ((string? string?)
> (string-append string-append)
> (error error)
> (cons cons)
> (map map)
> (apply apply))
> (define (error-printform x)
> (if (string? x)
> (string-append "\"" x "\"")
> x))
> (lambda (string . args)
> (apply error (cons string (map error-printform args))))))
>
> (define word->string
> (let ((number? number?)
> (string? string?)
> (number->string number->string)
> (symbol->string symbol->string))
> (lambda (wd)
> (cond ((string? wd) wd)
> ((number? wd) (number->string wd))
> (else (symbol->string wd))))))
>
> (define empty?
> (let ((null? null?)
> (string? string?)
> (string=? string=?))
> (lambda (x)
> (or (null? x)
> (and (string? x) (string=? x ""))))))
>
> (define member?
> (let ((> >) (- -) (< <)
> (null? null?)
> (symbol? symbol?)
> (eq? eq?)
> (car car)
> (not not)
> (symbol->string symbol->string)
> (string=? string=?)
> (cdr cdr)
> (equal? equal?)
> (word->string word->string)
> (string-length string-length)
> (whoops whoops)
> (string-ref string-ref)
> (char=? char=?)
> (list? list?)
> (number? number?)
> (empty? empty?)
> (word? word?)
> (string? string?))
> (define (symbol-in-list? symbol string lst)
> (cond ((null? lst) #f)
> ((and (symbol? (car lst))
> (eq? symbol (car lst))))
> ((string? (car lst))
> (cond ((not string)
> (symbol-in-list? symbol (symbol->string symbol) lst))
> ((string=? string (car lst)) #t)
> (else (symbol-in-list? symbol string (cdr lst)))))
> (else (symbol-in-list? symbol string (cdr lst)))))
> (define (word-in-list? wd lst)
> (cond ((null? lst) #f)
> ((equal? wd (car lst)) #t)
> (else (word-in-list? wd (cdr lst)))))
> (define (word-in-word? small big)
> (let ((one-letter-str (word->string small)))
> (if (> (string-length one-letter-str) 1)
> (whoops "Invalid arguments to MEMBER?: " small big)
> (let ((big-str (word->string big)))
> (char-in-string? (string-ref one-letter-str 0)
> big-str
> (- (string-length big-str) 1))))))
> (define (char-in-string? char string i)
> (cond ((< i 0) #f)
> ((char=? char (string-ref string i)) #t)
> (else (char-in-string? char string (- i 1)))))
> (lambda (x stuff)
> (cond ((empty? stuff) #f)
> ((word? stuff) (word-in-word? x stuff))
> ((not (list? stuff))
> (whoops "Invalid second argument to MEMBER?: " stuff))
> ((symbol? x) (symbol-in-list? x #f stuff))
> ((or (number? x) (string? x))
> (word-in-list? x stuff))
> (else (whoops "Invalid first argument to MEMBER?: " x))))))
>
> (define (parse expr)
> (parse-helper expr '() '()))
>
> (define (parse-helper expr operators operands)
> (cond ((null? expr)
> (if (null? operators)
> ((car operands))
> (handle-op '() operators operands)))
> ((number? (car expr))
> ((parse-helper (cdr expr)
> operators
> (cons (cons (car expr) '()) operands))))
> ((list? (car expr))
> (parse-helper (cdr expr)
> operators
> (cons (parse (car expr)) operands)))
> (else (if (or (null? operators)
> (> (precedence (car expr))
> (precedence (car operators))))
> (parse-helper (cdr expr)
> (cons (car expr) operators)
> operands)
> (handle-op expr operators operands)))))
>
> (define (handle-op expr operators operands)
> ( (parse-helper expr
> (cdr operators)
> (cons (cons (car operators)
> (list (cadr operands) (car operands)))
> (cddr operands))))
> )
> (define (precedence oper)
> (if (member? oper '(+ -)) 1 2))
>
>