# Why does my code not work? How can I fix it?

**URL:** <https://racket.discourse.group/t/why-does-my-code-not-work-how-can-i-fix-it/2489>\
**Category:** General\
**Created:** [November 10, 2023, 12:41pm UTC](https://racket.discourse.group/t/why-does-my-code-not-work-how-can-i-fix-it/2489 "2023-11-10T12:41:35Z")\
**Posts on this page:** 7\
**Page:** 1

<div class="post-metadata">

**Author:** ![Jack22](https://yyz2.discourse-cdn.com/free1/user_avatar/racket.discourse.group/jack22/32/1513_2.png) [@Jack22](https://racket.discourse.group/u/Jack22)\
**Post date:** [November 10, 2023, 12:41pm UTC](https://racket.discourse.group/t/why-does-my-code-not-work-how-can-i-fix-it/2489/1 "2023-11-10T12:41:35Z")

</div>

```scheme
(define (brew-time grams)
  (define water (* 100 (/ grams 6)))
   (cond
     [(< water 100) (error 'brew-time "Zu geringe Menge")]
     [(> water 800) (error 'brew-time "Zu grosse Menge")]
     [(= water 100) 60]
     [(and (>= water 100) ( <= water 300) (* (ceiling (/ water 100)) 60))]
     [(and (> water 300) (<= water 800) (+ 90 (* (ceiling (/ water 100) 30))))]))

```

I am getting the syntax error:

BrewTime.rkt:57:3: define: expected only one expression for the function body, but found 1 extra part

---

<div class="post-metadata">

**Author:** ![jimpjorps](https://yyz2.discourse-cdn.com/free1/user_avatar/racket.discourse.group/jimpjorps/32/140_2.png) [@jimpjorps](https://racket.discourse.group/u/jimpjorps)\
**Post date:** [November 10, 2023, 12:54pm UTC](https://racket.discourse.group/t/why-does-my-code-not-work-how-can-i-fix-it/2489/2 "2023-11-10T12:54:11Z")

</div>

If you're using the Student Languages, a `define` can only have one expression in it: that is, it has to look like

```scheme
(define (function arguments...)
    (... ...))

```

but your `define` has two expressions, the `(define water...)` definition and the `cond`.

If you're using BSL, rewrite it so that `water` is a helper function that takes a weight of water as its input.  
If you're using ISL or ASL, [wrap your definitions in `local`](https://htdp.org/2023-8-14/Book/part_three.html#%28part._ch~3a3use%29):

```scheme
(define (brew-time grams)
  (local
    [(define water ...)]
    (cond
      [...]
      [...])))
```

---

<div class="post-metadata">

**Author:** ![Jack22](https://yyz2.discourse-cdn.com/free1/user_avatar/racket.discourse.group/jack22/32/1513_2.png) [@Jack22](https://racket.discourse.group/u/Jack22)\
**Post date:** [November 10, 2023, 12:58pm UTC](https://racket.discourse.group/t/why-does-my-code-not-work-how-can-i-fix-it/2489/3 "2023-11-10T12:58:43Z")

</div>

Thank you very much, that already helps a lot. I am using BSL, But how exactly can I rewrite water to a helper function

---

<div class="post-metadata">

**Author:** ![jimpjorps](https://yyz2.discourse-cdn.com/free1/user_avatar/racket.discourse.group/jimpjorps/32/140_2.png) [@jimpjorps](https://racket.discourse.group/u/jimpjorps)\
**Post date:** [November 10, 2023, 1:00pm UTC](https://racket.discourse.group/t/why-does-my-code-not-work-how-can-i-fix-it/2489/4 "2023-11-10T13:00:17Z")

</div>

It'll look like

```scheme
(define (water grams) (...))
(define (brew-time grams) (cond ...))

```

and `brew-time` will use `water` within it.

---

<div class="post-metadata">

**Author:** ![Jack22](https://yyz2.discourse-cdn.com/free1/user_avatar/racket.discourse.group/jack22/32/1513_2.png) [@Jack22](https://racket.discourse.group/u/Jack22)\
**Post date:** [November 10, 2023, 1:04pm UTC](https://racket.discourse.group/t/why-does-my-code-not-work-how-can-i-fix-it/2489/5 "2023-11-10T13:04:19Z")

</div>

Hey, thank you. I tried this:

```scheme
(define (water grams)
  (* 100 (/ grams 6)))

(define (brew-time grams)
   (cond
     [(< water 100) (error 'brew-time "Zu geringe Menge")]
     [(> water 800) (error 'brew-time "Zu grosse Menge")]
     [(= water 100) 60]
     [(and (>= water 100) ( <= water 300) (* (ceiling (/ water 100)) 60))]
     [(and (> water 300) (<= water 800) (+ 90 (* (ceiling (/ water 100) 30))))]))

```

but now I have the error:  
water: expected a function call, but there is no open parenthesis before this function in: water

---

<div class="post-metadata">

**Author:** ![jimpjorps](https://yyz2.discourse-cdn.com/free1/user_avatar/racket.discourse.group/jimpjorps/32/140_2.png) [@jimpjorps](https://racket.discourse.group/u/jimpjorps)\
**Post date:** [November 10, 2023, 6:13pm UTC](https://racket.discourse.group/t/why-does-my-code-not-work-how-can-i-fix-it/2489/6 "2023-11-10T18:13:01Z")

</div>

That's half the fix, the other half is to go into `brew-time` and replace `water` with function calls now that it's a function and not a value.

---

<div class="post-metadata">

**Author:** ![jbclements](https://yyz2.discourse-cdn.com/free1/user_avatar/racket.discourse.group/jbclements/32/11_2.png) [@jbclements](https://racket.discourse.group/u/jbclements)\
**Post date:** [November 11, 2023, 6:57pm UTC](https://racket.discourse.group/t/why-does-my-code-not-work-how-can-i-fix-it/2489/7 "2023-11-11T18:57:56Z")

</div>

Since it looks like `grams` is not used after `water` is computed, it might be simpler to refactor this as

```scheme
(define (brew-time/helper water) ...)
(define (brew-time grams)
  (brew-time/helper (* 100 (/ grams 6))))

```

... and then just use your existing code in brew-time/helper.

This does seem like an ideal case for a local definition, though, I agree that your original code was quite readable and nice.

(Also, maybe you want to bump it up to 75g/l ? No? Ah well.)
