Πόσο μακριά μπορεί να πάει μακροεντολές LISP;




Έχω διαβάσει πολλά που LISP να επαναπροσδιορίσει τη σύνταξη on the fly, προφανώς με μακροεντολές. Είμαι περίεργος πόσο κάνει αυτό πραγματικά να πάμε; Μπορείτε να επαναπροσδιορίσει τη δομή της γλώσσας τόσο πολύ ώστε να γίνει οριακά ένας μεταγλωττιστής για άλλη γλώσσα; Για παράδειγμα, θα μπορούσατε να αλλάξετε τη λειτουργική φύση της LISP σε μια πιο προσανατολισμένη αντικείμενο τη σύνταξη και τη σημασιολογία, ίσως να πω με το συντακτικό πιο κοντά σε κάτι σαν Ruby;


Ιδιαίτερα, είναι δυνατόν να απαλλαγούμε από την κόλαση παρένθεση χρησιμοποιώντας μακροεντολές; Έχω μάθει αρκετά (Emacs-) LISP για να προσαρμόσετε το Emacs με τη δική μου μικρο-χαρακτηριστικά, αλλά είμαι πολύ περίεργος πόσο μακριά μακροεντολές μπορεί να πάει στην προσαρμογή της γλώσσας.
Αυτή είναι μια πολύ καλή ερώτηση.


Νομίζω ότι είναι λεπτή, αλλά σίγουρα λογοδοτούν:


Οι μακροεντολές που δεν έχουν κολλήσει σε s-εκφράσεις. Δείτε το μακρο LOOP για μια πολύ πολύπλοκη γλώσσα γραμμένο με λέξεις-κλειδιά (σύμβολα). Έτσι, ενώ μπορεί να ξεκινήσει και να τελειώσει το βρόχο με παρενθέσεις, μέσα σε αυτό έχει τη δική του σύνταξη.


Παράδειγμα:



```
(loop for x from 0 below 100
      when (even x)
      collect x)

```

Τούτου λεχθέντος, πιο απλό μακροεντολές χρησιμοποιούν μόνο s-εκφράσεις. Και θέλετε να «κολλήσει» με τη χρήση τους.


Αλλά s-εκφράσεις, όπως Sergio έχει απαντήσει, αρχίζουν να αισθάνονται δεξιά. Η σύνταξη παίρνει έξω από το δρόμο και να ξεκινήσετε την κωδικοποίηση στο δέντρο σύνταξη.


Όσο για μακροεντολές αναγνώστη, ναι, θα μπορούσε ενδεχομένως να γράψετε κάτι σαν αυτό:



```
#R{
      ruby.code.goes.here
  }

```

Αλλά τότε θα πρέπει να γράψετε τη δική σας Ruby σύνταξη αναλυτή.


Μπορείτε, επίσης, να μιμούνται μερικές από τις Ruby κατασκευάζει, όπως τετράγωνα, με μακροεντολές που συγκεντρώνει τις υπάρχουσες Lisp κατασκευές.



```
#B(some lisp (code goes here))

```

θα μεταφραστεί σε



```
(lambda () (some lisp (code goes here)))

```

Δείτε [αυτή τη σελίδα](http://rottcodd.wordpress.com/2007/11/29/lambda-shortcut/) για το πώς να το κάνουμε.
**Για την «ορθογραφία λάθος» μέρος (Μήπως εννοείτε)**


* Θα μπορούσατε να κάνετε κάποια `LIKE`ερωτήματα στο db π.χ. `LIKE %j%e%a%n%s%`, αλλά αν θέλετε να το κάνετε καλά, θα πρέπει να χρησιμοποιήσετε μια βιβλιοθήκη αναζήτησης όπως αυτό:


	+ <https://github.com/TomLingham/Laravel-Searchy>
	+ <http://tnt.studio/blog/did-you-mean-functionality-with-laravel-scout>



> 
> Μπορείτε να δημοσιεύσετε το αρχείο ρυθμίσεων στον κατάλογο της εφαρμογής σας και να παρακάμψετε τις ρυθμίσεις, εκτελώντας php τεχνίτη πωλητή: δημοσιεύει για να αντιγράψετε τις ρυθμίσεις στο φάκελο config σας όπως searchy.php
> 
> 
> Μπορείτε να ορίσετε το προεπιλεγμένο πρόγραμμα οδήγησης που θα χρησιμοποιηθεί για τις αναζητήσεις στο αρχείο ρυθμίσεων. Οι επιλογές σας (στην παρούσα φάση) είναι: ασαφή, απλό και Levenshtein.
> 
> 
> Μπορείτε επίσης να παρακάμψετε αυτές τις μεθόδους, χρησιμοποιώντας την ακόλουθη σύνταξη κατά την εκτέλεση μιας αναζήτησης:
> 
> 
> 


Με τον καθορισμό [Levenshtein απόσταση](https://en.wikipedia.org/wiki/Levenshtein_distance) μπορείτε να finetune πόσο μακριά μια λέξη μπορεί να είναι.


* Αν χρειάζεστε καλύτερη απόδοση θα πρέπει να εξετάσει κάτι σαν `solr`ή `elasticsearch`για το έργο αυτό.


<https://wiki.apache.org/solr/SpellCheckComponent>
<https://www.elastic.co/guide/en/elasticsearch/reference/current/query-dsl-fuzzy-query.html>


**Για το τμήμα μετάφρασης**


Απλά θα πρέπει να έχει ένα λεξικό έτοιμο σε βάση δεδομένων ή εντοπισμό των αρχείων σας και εκτελέστε το χαμηλότερο σημείο εισόδου και αυτό. Αναμείνετε υψηλή φορές υπολογιστών τόσο για τη διόρθωση ορθογραφίας και της μετάφρασης στον κώδικά σας. [εικόνα] gnutechie:

ισως το sudo δεν παιζει και καλη μπαλα με τετοιες εντολες

ας λύσουμε το μυστήριο. το sudo δουλεύει για μια μόνο εντολή. μα μία δεν είναι εύλογα θα αναρωτηθείς; όχι αν ξέρεις ένα βαθιά κρυμμένο “μυστικό”. οι ανακατευθύνσεις είναι πίπες (δηλαδή pipes/σωλήνες, αλλά έτσι δεν θ… Αυτή είναι η γνώμη μου, αλλά? όπως ακριβώς και οι τάξεις περίπτωση δεν, θα ήθελα να εφαρμόσουν μια `copy`μέθοδο του είδους στην τάξη για να καταστεί δυνατή η τροποποίηση, διατηρώντας παράλληλα το αμετάβλητο, αλλά υπάρχει ορισμένες περιπτώσεις που δεν μπορώ να βοηθήσω να το μεταβλητό? Για παράδειγμα, όταν κάτι αναμένεται να γίνει η λειτουργία αντιγραφής είναι πολύ μεγάλη και αργή για την κατηγορία? όπως όταν η τάξη έχει τόσα πολλά συχνά τροποποιημένο μέλη. Και μην ανησυχείτε για χιλιάδες περιπτώσεις που επιπλέουν γύρω στη μνήμη, επειδή είναι αυτόματα GC'ed, οπότε το πιο πραγματικό πρόβλημα είναι ο χρόνος κόστος της αντιγραφής περιπτώσεις της κλάσης. Παρακαλώ πείτε μου εάν η γνώμη μου είναι κάπως λάθος :) για να ρωτήσει και να σταματήσει αν πατήσεις κάτι άλλο εκτός από `y’ ή ‘y’

read -p "are you sure? " -n 1 -r

echo # (optional) move to a new line

if [[ ! $reply =~ ^[yy]$ ]]

then

echo -ne "\ncancelled\n"

exit 1

fi

echo -ne "\n"

το μυστικό είναι η κανονική έκφραση (regular experssion) '^[y… Συνήθως δεχόμαστε είτε "have to" είτε "must". Στείλτε μας, παρακαλώ, ένα συγκεκριμένο παράδειγμα που μπορούμε να ελέγξουμε για λάθοι. Τι εννοείς "τάξεις"; 
Είναι μία πλατφόρμα οπτικοακουστική και διαδραστική για να μάθεις κάτι περισσότερο από τα βασικά σε μία γλώσσα. Μπορείς να φτάσεις μέχρι το 25 επίπεδο (αυτή τη στιγμή είσαι στο 6) ... και αν θέλεις να εμπλουτίσεις μπορείς να προσθέσεις να μάθεις "Ελληνικά" από την αγγλική γλώσσα, παράλληλα. Πατάς εκεί που λέει πρόσθεσε ένα νέο μάθημα. Γενικά, από Ελληνικά μπορείς να μάθεις μόνο Αγγλικά. Από Αγγλικά πάλι, μπορείς να μάθεις πολλές γλώσσες. Ελπίζω να σε βοήθησα να βγάλεις άκρη. :) Καλή αρχή!! κάτι έχει γίνει λάθος στην περίπτωσης σου διότι αυτή η μετάφραση χρησιμοποιείται σε αρκετές επαγγελματικές εγκαταστάσεις εταιρειών (με εξαίρεση κάποιες περιπτώσεις που είναι custom μεταφράσεις εξειδίκευσης π.χ. ιατρεία, οδοντιατρεία, δικηγορικά γραφεία και δεν είναι online) Κάνατε πολύ καλή δουλειά στο να συνοψίσετε τι είναι φοβερό στο Node.js. Η αίσθησή μου είναι ότι το Node.js είναι ιδιαίτερα κατάλληλο για εφαρμογές όπου θα θέλατε να διατηρήσετε μια μόνιμη σύνδεση από το πρόγραμμα περιήγησης πίσω στον διακομιστή. Χρησιμοποιώντας μια τεχνική γνωστή ως ["long-polling"](https://en.wikipedia.org/wiki/Push_technology#Long_polling), μπορείτε να γράψετε μια εφαρμογή που στέλνει ενημερώσεις στον χρήστη σε πραγματικό χρόνο. Η πραγματοποίηση long polling σε πολλούς από τους γίγαντες του διαδικτύου, όπως το [Ruby on Rails](https://en.wikipedia.org/wiki/Ruby_on_Rails) ή το [Django](https://en.wikipedia.org/wiki/Django_%28web_framework%29), θα δημιουργούσε τεράστιο φόρτο στον διακομιστή, επειδή κάθε ενεργός πελάτης τρώει μια διεργασία του διακομιστή. Αυτή η κατάσταση ισοδυναμεί με επίθεση [tarpit](https://en.wikipedia.org/wiki/Tarpit_(networking)). Όταν χρησιμοποιείτε κάτι όπως το Node.js, ο διακομιστής δεν έχει ανάγκη να διατηρεί ξεχωριστά νήματα για κάθε ανοιχτή σύνδεση. 


Αυτό σημαίνει ότι μπορείτε να δημιουργήσετε μια [εφαρμογή συνομιλίας με βάση το πρόγραμμα περιήγησης](https://github.com/rivalslayer/node_chat) σε Node.js που δεν χρειάζεται σχεδόν καθόλου πόρους συστήματος για να εξυπηρετεί πολλούς πελάτες. Κάθε φορά που θέλετε να κάνετε αυτού του είδους τη μακροχρόνια αναζήτηση, το Node.js είναι μια εξαιρετική επιλογή. 


Αξίζει να αναφέρουμε ότι και η Ruby και η Python έχουν εργαλεία για να κάνουν κάτι τέτοιο ([eventmachine](http://rubyeventmachine.com/) και [twisted](https://twistedmatrix.com/trac/), αντίστοιχα), αλλά ότι το Node.js το κάνει εξαιρετικά καλά, και από την αρχή. Η JavaScript είναι εξαιρετικά καλά τοποθετημένη σε ένα μοντέλο ταυτόχρονης λειτουργίας βασισμένο σε callback, και υπερέχει εδώ. Επίσης, η δυνατότητα σειριοποίησης και αποσειριοποίησης με JSON εγγενές τόσο στον πελάτη όσο και στον διακομιστή είναι αρκετά έξυπνη.


Ανυπομονώ να διαβάσω άλλες απαντήσεις εδώ, αυτή είναι μια φανταστική ερώτηση.


Αξίζει να επισημάνουμε ότι το Node.js είναι επίσης εξαιρετικό για καταστάσεις στις οποίες θα επαναχρησιμοποιήσετε πολύ κώδικα σε όλο το χάσμα πελάτη/εξυπηρετητή. Το [Meteor framework](https://meteor.com) το κάνει αυτό πολύ εύκολο, και πολλοί άνθρωποι προτείνουν ότι αυτό μπορεί να είναι το μέλλον της ανάπτυξης ιστοσελίδων. Μπορώ να πω από την εμπειρία μου ότι είναι πολύ διασκεδαστικό να γράφεις κώδικα στο Meteor, και ένα μεγάλο μέρος αυτού είναι να ξοδεύεις λιγότερο χρόνο σκεπτόμενος πώς θα αναδομήσεις τα δεδομένα σου, ώστε ο κώδικας που εκτελείται στο πρόγραμμα περιήγησης να μπορεί εύκολα να τα χειριστεί και να τα μεταβιβάσει πίσω.


Εδώ είναι ένα άρθρο για το Pyramid και το long-polling, το οποίο αποδεικνύεται ότι είναι πολύ εύκολο να ρυθμιστεί με λίγη βοήθεια από το gevent: [*TicTacToe και Long Polling με την Pyramid*](http://michael.merickel.org/2011/6/21/tictactoe-and-long-polling-with-pyramid/). κι εγώ το ίδιο αναρωτιέμαι. είμαι στο επίπεδο 12 με 47% ευχέρεια στη χρήση της γλώσσας. Έχω ολοκληρώσει το english tree. από δω και πέρα τι κάνουμε; απλά ενίσχυση γνώσεων για να ανέβουμε επίπεδα;