Как мне написать оператор if-else в Scheme? - PullRequest
0 голосов
/ 19 апреля 2020

Я хотел бы преобразовать эти двойные if-выражения в оператор if-else.

(if (symbol? x)
            (begin
              (display "ONE")
            )
    )
(if (integer? x)
            (begin
              (display "TWO")
            ) 
)

Без использования ракетки.

1 Ответ

2 голосов
/ 19 апреля 2020

Используя только стандартную схему, у нас есть cond для этого:

(cond ((symbol? x) (display "ONE"))
      ((integer? x) (display "TWO"))
      (else (display "OTHER")))

Если у вас есть какое-то ограничение, и вы должны использовать if, мы можем его вложить :

(if (symbol? x)
    (display "ONE")
    (if (integer? x)
        (display "TWO")
        (display "OTHER")))

Мы можем удалить выражения begin. В версии cond они совершенно не нужны, а во вложенной версии if они не требуются, если внутри есть одно выражение.

В обеих версиях я добавил условие else, потому что некоторые Схемы ароматов делают его обязательным и в любом случае это лучшая практика.

...