Esiste un linguaggio che consente questa sintassi: add (elements) in (index); [duplicare]

3

Esiste un linguaggio con una tale sintassi? In caso negativo, quali sono alcune delle limitazioni / svantaggi di questa sintassi nel caso in cui desideri scrivere una lingua che l'ha supportata?

Alcuni esempi:

sort(array, fromIndex, toIndex);

vs

sort(array)from(index1)to(index2);

La firma del metodo dovrebbe:

sort(SomeType[] arr)from(int begin)to(int end){
...
}

Aggiornamento:

Perché potrebbe esserci qualche confusione, vorrei chiarire ... Intendevo questa domanda come un'idea generale come questa (non specifico per l'ordinamento e possibilmente usando parole chiave come from e to ):

In JAVA (linguaggio simile):

void myfancymethod(int arg1, String arg2){
...
}

myfancymethod(1, "foo");

In linguaggio immaginario:

void my(int arg1)fancy(String arg2)method{
...
}

my(1)fancy("foo")method;
    
posta c_maker 18.11.2011 - 22:34
fonte

6 risposte

17

I linguaggi smalltalk e derivati (incluso l'Objective C) usano una sintassi come questa per le chiamate ai metodi.

In Objective C, ad esempio, si può lavorare con un contenitore NSMutableArray con qualcosa del tipo:

id a = [[NSMutableArray alloc] initWithCapacity: 3]

[a insertObject: @"Bob" atIndex: 0] 
[a insertObject: @"Fred" atIndex: 1]
[a insertObject: @"Mary" atIndex: 2]    

[a replaceObjectAtIndex: 3 withObject: @"Hello, World!"]
    
risposta data 18.11.2011 - 22:51
fonte
12

Se crei un'interfaccia fluente , puoi scrivere più o meno in questo modo:

array.From(fromIndex).To(toIndex).Sort();

Ma la risoluzione del sovraccarico del metodo ti darà una sintassi più semplice:

array.Sort(fromIndex, toIndex);

... e se dai un nome alle cose in modo sensato, è comunque auto-descrittivo.

Se hai ancora bisogno della verbosità descrittiva, alcuni linguaggi (come C # 4.0) ti permettono di specificare i nomi per ciascun parametro del metodo:

array.Sort(from:= fromIndex, to:= toIndex);
    
risposta data 18.11.2011 - 23:00
fonte
7

In Agda è possibile utilizzare un identificatore contenente caratteri di sottolineatura. Considera la dichiarazione di if :

if_then_else_ : {A : Set} -> Bool -> A -> A -> A
if true  then x else y = x
if false then x else y = y
    
risposta data 18.11.2011 - 23:01
fonte
2

Non sono a conoscenza di alcun linguaggio con sintassi simile, anche se QBasic e Visual Basic avevano alcune istruzioni incorporate con sintassi personalizzata, come "LINE (10,10) - (80,95)".

Mi piace la tua idea come funzione generica. Penso che "sort (array da index1 a index2)" sembrerebbe leggermente più attraente ed essere più facile da scrivere, e presumibilmente stai parlando di una singola chiamata di funzione qui, che non è così chiara se sono necessari diversi set di parentesi. L'analisi potrebbe essere difficile: "da" e "a" rappresentano fondamentalmente le virgole nella sintassi che ho appena suggerito, ma il parser non lo saprebbe per certo fino a quando il nome della funzione non viene risolto. Tuttavia, potrebbe essere analizzato come una sequenza di espressioni: (array), (from), (index1), (to), (index2) dove (from) e (to) vengono sostituiti con virgole durante l'analisi semantica.

Invece di definire "ordina" in un modo speciale, puoi anche immaginarlo come un modo per rappresentare i parametri con nome:

sort (SomeType[] arr, int from, int to) { ... } // declaration
sort (arr from: index1 to: index2); // possible call syntax 1
sort (arr, from index1, to index2); // possible call syntax 2
sort (arr from index1 to index2); // possible call syntax 3
    
risposta data 19.11.2011 - 01:12
fonte
1

Potresti scrivere il tuo esempio in Tcl in questo modo se hai scritto la tua funzione di ordinamento:

sort array from $index1 to $index2
    
risposta data 19.11.2011 - 04:01
fonte
1

TeX ha questo tipo di funzionalità: puoi definire ad esempio:

\def\say #1 to #2.{#2 said: ''#1.''}

E usalo:

\say Hello to Mike.

Per ottenere:

Mike said: ''Hello.''

Ciò consente alcuni trucchi sintattici.

    
risposta data 19.11.2011 - 22:11
fonte

Leggi altre domande sui tag