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


10

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

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


6
練習とは別に?

ユーザーRPLは、LISPの私のお気に入りのフレーバーです。括弧もありません! en.wikipedia.org/wiki/RPL_(programming_language)HP 50gを使用できません:-(
ロビー

最初は直感的ではなかったように見えましたが、今は素晴らしいと思い、ほとんど読書をしました。それは実際に私たちが話す方法です:「...の合計、...の積」 しかし、それは異なる種類の読書を必要とします。次に、演算子を1行で読み取るのではなく、すべての引数に適用するだけです。
マークC

プレフィックス表記の何が問題になっていますか?ほとんどすべての言語で使用されています。ほとんどの場合、関数呼び出しは接頭辞です。
SKロジック

あんまり; 「直感的」は直観的です。なぜなら、20年以上にわたって数学的慣習の形でそれを学んだからです。この規則を使用しているのはLISPとおそらく他のいくつかの言語だけであり、他の言語をさらに学習するため、等しく「直感的」になることはほとんどありません。ここでは単純な式についてのみ説明します(2 + 3 ...「ハーフページ」ライナーをどのように試したいですか?:)
Rook

回答:


6

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


あなたが何だろう( = 1 2 )( > 4 2 )
ビビアン・リバー

3
あなたは修辞的な質問を使うでしょう。:)等しい?(何ですか?)、「1と2!(
えーと

@RiceFlour(ねえ、私は米粉から作られたものを食べて育った-私はグルテンの問題を抱えている。)私は「1は2と等しいですか?」または「次は等しいですか?」と読みます。大なり演算子と小なり演算子はプレフィックス形式ではそれほど自然ではありませんが、Lispコードでどれくらいの頻度で使用されるのでしょうか。
マークC

7

トリック?何のために?

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


あまり読んだことがありませんが、今は素晴らしいと思います。私の脳は、括弧についてほとんど「触覚」の感覚を持ち始めているようです。フィーリングはもっと鋭くなるだけだと思います。
マークC

5

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

(operator operand1 operand2 ...)

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

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

うん、これは私がそれをする方法です。JavaやC#などのメソッド呼び出しに戻って見てみると、それらは実際にはMyMethod(arg1、arg2)のわずかに異なる場所で括弧を前置した表記にすぎません。
nlawalker、2011

4

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

Lispは単に接頭辞のみを使用します-デフォルトでは。sin(x)が数学から直感的である場合、(sin x)はそれほど遠くない。move(dog、home)が従来のプロシージャコールの場合、Lispではそれは(move dog home)です。

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


2

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

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

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.