web-dev-qa-db-ja.com

Elisp:どうすれば他の表現ができますか?

Elispでは、ifステートメントロジックはifケースとelseケースのみを許可します。

(if (< 3 5) 
  ; if case
    (foo)
  ; else case
    (bar))

しかし、else-ifを実行したい場合はどうなりますか? elseケース内に新しいifステートメントを入れる必要がありますか?少し面倒なようです。

9
Cameron

入れ子の場合

(if test-expression then-expression else-expression)の部分はelse ifであるため、新しいifelse-expressionとしてネストします。

(if test-expression1
    then-expression1
    (if test-expression2
        then-expression2
        else-expression2))

Condの使用

他の言語では、else ifは通常同じレベルにあります。 Lispには、そのためのcondがあります。 condとまったく同じです。

(cond (test-expression1 then-expression1)
      (test-expression2 then-expression2)
      (t else-expression2))

式はそれだけである可能性があることに注意してください。多くの場合、これらは(some-test-p some-variable)のような式であり、他の式も通常はそうです。評価される単一のシンボルになることはめったにありませんが、非常に単純な条件文の場合もあります。

17
Sylwester