# User talk:Chunes

From Rosetta Code

## "Code review" for Plain English[edit]

Hello Chunes, would you please take a look at my implementation of factorial? I'm not quite happy with it, and I hope could suggest some improvements. For example, I don't like the phrase `To put a number's factorial into another number`

, but don't know how else to make it work. Same with `Put the number's factorial into the number`

, which seems quite an unnatural thing to say in plain English. I would like to keep the recursive approach however, just make it more "idiomatic" if there's such thing as idiomatic Plain English. Thanks for help! --Dick de Bill (talk) 14:48, 25 September 2020 (UTC)

- I've been struggling a bit myself with naming routines. I think I would go one of two ways with this. The first is
A factorial is a number.

To compute a factorial of a number:

...

\Calling the routine

Compute a factorial of 5.

Write "" then the factorial on the console.- Declaring type aliases to make routines sound more natural is commonplace in the noodle, so I think it's idiomatic. The downside here is the indefinite article
`a`

sounds a bit off. You could also use`some`

, but it still sounds strange, like there could be more than one result.

- The second is
To compute the factorial of a number giving another number:

...

\Calling the routine

Compute the factorial of 5 giving a number.

Write "" then the number on the console.- I've seen this "giving" phrasing in the noodle as well, and I think it's a fairly elegant solution.

- Another (weird?) way you could go with it is just embrace mutating a single argument.
To factorialize a number:

If the number is 0, bump the number; exit.

Put the number minus 1 into another number.

Factorialize the other number.

Multiply the number by the other number.

\Calling the routine

Put 5 into a number. Factorialize the number.

Write "" then the number on the console.- Regarding the input stuff, I would refactor it slightly so you don't need any global state.
To run:

Start up.

Demonstrate input.

Write "Bye-bye!" to the console.

Wait for 1 second.

Shut down.

To demonstrate input:

Write "Enter a number: " to the console without advancing.

Read a string from the console.

If the string is empty, exit.

Convert the string to a number.

If the number is negative, repeat.

Put the number's factorial into another number.

Write "Factorial of the number: " then the other number then the return byte to the console.

Repeat.

- The idea is putting the loop entirely inside the
`To demonstrate input:`

routine so that you don't need any global flags. This can be done concisely with`Repeat.`

by itself at the end of the routine. The loop will begin again from the top of the routine. I also used`repeat`

when a negative number is encountered to act like a`continue`

does in most other languages. --Chunes (**talk**) 17:03, 25 September 2020 (UTC)

- Thanks for your suggestions; they all seem much more natural than my original implementation. I decided to go with the first approach and updated the factorial entry accordingly. --Dick de Bill (talk) 22:02, 25 September 2020 (UTC)