2016-11-19 13 views
6

elispでは、if文のロジックではif文のみが許されます。Elisp:どうすればelse-ifを表現できますか?

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

しかし、もしelse-ifをしたいのですが? else文の中に新しいif文を入れる必要がありますか?ちょっと面倒です。

+3

['cond'](https://www.gnu.org/software/emacs/manual/html_node/elisp/Conditionals.html) – jkiiski

答えて

11

ネスティング(if test-expression then-expression else-expression)else ifの部分以来

が巣にelse-expressionとして新しいifであるかどう:

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

指揮

を使用して他の言語でelse ifが上通常であります同じレベル。リップスでは、それのためにcondがあります。ここでcondとまったく同じである:式がちょうどその可能

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

注意。このような表現はしばしば(some-test-p some-variable)のような表現であり、他の表現も通常そうである。非常にめったに評価されない単一のシンボルですが、非常に単純な条件文の場合もあります。

+1

を参照してください。私は、" cond'を使うのがおそらく最も慣用的です溶液。場合によっては、ネストされたifでオブジェクトがより明確になることもありますが、それはあまり使用されないので、「cond'を使用する」ことは賢明な第1のアプローチです。 – Vatine

+0

@Vatine if木が1つの枝に重い限り私は同意します。もしあなたがこのようなものを持っていれば、(赤いo)(赤い四角形の場合は赤い四角形)(青い四角形の場合) (赤と赤の)赤い四角形)赤い四角形の赤い四角形赤い四角形赤い四角形赤い四角形赤い四角形(t 'blue-round)) 'である。 1時間当たり平均3.25回のテストに対して、 'cond'を使うと、コードはやや乱雑です。 'if'以上の余分な機能を使用しないと' cond'を使用しません。例えば。 '(もしテストすれば)'私は 'cond'と書くことはありません – Sylwester

+0

うん、私は「決して使ってはいけない」と言わなかった理由のひとつです。入れ子にされた 'if'(または複数の' when'、 'or'で囲まれ、' if'内部で)は 'cond'よりも明瞭です。 – Vatine

関連する問題