web-dev-qa-db-ja.com

プレフィクス表記に頭を悩ませていますか?

LISPについて読んでいます。

接頭表記が特定のレベルでどのように機能するかは理解していますが、直感的にするための秘訣はないかと思いました。

10

適切な動詞を用いた話し言葉として、左から右へ精神的に読むことが役立ちます。たとえば、(+ 3 2)は「3と2を加算」のようになります。より一般的なケースでは、「$ operandsで$ operationを実行する」と言うことができます。同じ場合に適用:「3つと2つで追加操作を実行する」。

6

トリック?何のために?

メンタルパーサーが慣れていないため、まだ直感的には感じられません。そのまま使って、何度も何度も読んだ方が良いでしょう。

7
Falcon

あなたはそれを一種の関数呼び出しと考えることができます:

(operator operand1 operand2 ...)

それについて特別なことは何もありません。 C++(およびそれを許可する他の多くの言語)で演算子をオーバーロードする場合、この種の関数をそのように正確に定義する必要があることがよくあります。

MyClass operator+(MyClass const& x, MyClass const& y);
5

多くの言語では、接頭辞、接頭辞、さらには接尾辞を組み合わせて使用​​しています。

LISPは単にプレフィックスのみを使用します-デフォルトでは。 sin(x)が数学から直感的である場合、(sin x)はそれほど離れていません。 move(dog、home)が従来のプロシージャコールの場合、LISPではそれは(move dog home)です。

LISPは数学に例外を設けず、通常の関数呼び出しのように+、-、*などを扱います。

4
Rainer Joswig

(最終的には)「すべてが関数呼び出しです」(または特別な形式、またはマクロ展開で、どちらも「関数呼び出し」の表面構文を持つ)をクリックすると、かなり自然な感じがしました。

したがって、(= 1 2)それを「1と2の数値の等しい比較を呼び出す」と読みました。

2
Vatine