9

私たちが(何らかの言語で)書くとき:

   lengthOf(n)

私たちはそれを英語の「空白を埋める」構造の略語と考えています。

  length of __

しかし、私たちがこれらのようなものを書くとき:

  isAnInteger(n)
  appendTo(n,m)

私たちは次のような文を考えます:

  __ is an integer
  append ___  to  ___

したがって、次のような関数呼び出し式を許可する方が自然に思えます。

  (n)isAnInteger
  append(n)to(m)

'関数名'は次のようなものです。

  _isAnInteger
  append_to_

誰かがこれを可能にする既存のプログラミング言語に名前を付けることができますか? オブジェクト指向言語では、オブジェクトを最前線の1つの引数にすることは知っていますが、より柔軟な構文について疑問に思っています。

4

7 に答える 7

3

ブライアン・ライスが指摘したように、モードの mixfix 記法はこれを正確に処理します。あなたは正しい構文さえ持っています。

あなたの例

_isAnInteger
append_to_

Maude では次のように宣言されます。

op _IsAnInteger : Int -> Bool
op append_to_ : Int List -> List

そして、次のように呼ばれます

5 IsAnInteger
append 5 to L
于 2012-06-08T15:31:40.487 に答える
3

Mixfix は、Objective-C による Smalltalk 構文機能として上記で提示されたものの最も一般的な形式です。モードの「バブル」解析は、これの最も明確に文書化された実装です。より一般的には、「mixfix parsing」をググってください

于 2012-04-18T20:52:22.093 に答える
1

はい、そのようなものは存在しますが、質問で提示された正確な構文ではありません。

JavaScriptではチェーンと呼ばれ、jQueryなどのフレームワークで一般的に見られ、DOM要素をその場で簡単に作成および変更できます。

$('<div/>')
 .css('background', '#f00')
 .css('width', '100px')
 .css('height', '100px')
 .hide()
 .appendTo('BODY')
 .fadeIn();

上記のjQueryスニペットは、DIV要素を作成し、幅、高さ、背景色を設定し、を非表示にDIVして、ドキュメントに追加し、フェードイン効果を適用します。

構文は重要です。次の例を考えます。

(n)isAnInteger
append(n)to(m)

括弧は明らかに関数の引数の区切り文字を意味します。ただし、関数名の区切り文字とオブジェクト/モノの区切り文字も必要です。より良い構文は次のとおりです。

n.isAnInteger().append(n).to(m)

これはjQuery構文と非常によく似ています。

 $('DIV')
  .filter(':visible')
  .appendTo('#new_element');

DIV表示されている要素を検索し、IDが。の要素にコピーしますnew_element

于 2012-04-18T04:07:04.943 に答える
1

Smalltalkはかなり近いです。(これは、別の回答で言及されているObjective-Cと同じ構文です)

Smalltalkで送信されるメッセージは中かっこを使用しませんが、フォームに従いますdoSomething:with:

だからあなたは書くことができます:

5 isInteger
aList appendTo: anotherList
aList at: aPosition ifAbsent: anAction

すべてのメッセージは左側にある必要があるオブジェクト(受信者)に送信されるため、次のように書き込むことはできません。

append: aList to: anotherList   "illegal syntax"

構文doSomething:with:は、中括弧を使用するよりも自然です。どのパラメータが何であるかについて、混乱しにくくなります。たとえば、次のことを考慮してください。

   aList.sublist( i, j )
   aList sublistFrom: i to: j

メソッドに適切な名前を付けると、中括弧とは異なり、最初の引数が下位インデックスで、2番目の引数が上位インデックスであることは明らかです。

于 2012-04-18T06:49:47.627 に答える
1

Graceは新しい教育言語 (まだ開発中) であり、ほとんど任意の順序の引数をサポートしています。

class MyObject {
    method choseBetween (a : Block<None>) and (b : Block<None>) -> None {
        if (Random.nextBoolean)
            then { a.apply } else { b.apply } }
}

次のように呼び出される可能性があります。

MyObject.new.chooseBetween { print("Yes") } and { print("No") }
于 2012-04-22T00:37:51.767 に答える
0

Objective-Cがおそらく最も近いでしょう。例:

- (void)setRangeStart:(int)start end:(int)end;

- (void)importDocumentWithName:(NSString *)name withSpecifiedPreferences:
(Preferences *)prefs beforePage:(int)insertPage;

次のように呼び出されます:

[obj setRangeStart:1 end:42];
[obj importDocumentWithName:@"foo" withSpecifiedPreferences:prefs beforePage:1];

でも許さ[obj 5:isAnInteger]ない。

于 2012-04-18T05:06:18.433 に答える
0

mixfix 演算子をサポートする 2 つの言語が頭に浮かびます: AgdaBitCです。

于 2012-04-28T17:14:40.837 に答える