From mboxrd@z Thu Jan 1 00:00:00 1970 Path: news.gmane.org!not-for-mail From: John Withers Newsgroups: gmane.emacs.help Subject: Re: Perl, etc has these "?"-prefix modifiers/codes/whatever. Precisely which does emacs have (and NOT have)? Date: Thu, 18 Feb 2010 08:57:35 -0800 Message-ID: <1266512255.19371.72.camel@Frank-Brain> References: <877hqaojg9.fsf@galatea.lan.informatimago.com> Reply-To: grayarea@reddagger.org NNTP-Posting-Host: lo.gmane.org Mime-Version: 1.0 Content-Type: text/plain Content-Transfer-Encoding: 7bit X-Trace: ger.gmane.org 1266512340 10616 80.91.229.12 (18 Feb 2010 16:59:00 GMT) X-Complaints-To: usenet@ger.gmane.org NNTP-Posting-Date: Thu, 18 Feb 2010 16:59:00 +0000 (UTC) Cc: help-gnu-emacs@gnu.org To: "Pascal J. Bourguignon" Original-X-From: help-gnu-emacs-bounces+geh-help-gnu-emacs=m.gmane.org@gnu.org Thu Feb 18 17:58:55 2010 Return-path: Envelope-to: geh-help-gnu-emacs@m.gmane.org Original-Received: from lists.gnu.org ([199.232.76.165]) by lo.gmane.org with esmtp (Exim 4.69) (envelope-from ) id 1Ni9iI-0003yD-Nl for geh-help-gnu-emacs@m.gmane.org; Thu, 18 Feb 2010 17:58:55 +0100 Original-Received: from localhost ([127.0.0.1]:35674 helo=lists.gnu.org) by lists.gnu.org with esmtp (Exim 4.43) id 1Ni9iI-0003TN-8A for geh-help-gnu-emacs@m.gmane.org; Thu, 18 Feb 2010 11:58:54 -0500 Original-Received: from mailman by lists.gnu.org with tmda-scanned (Exim 4.43) id 1Ni9hF-0003Ez-64 for help-gnu-emacs@gnu.org; Thu, 18 Feb 2010 11:57:49 -0500 Original-Received: from [140.186.70.92] (port=37234 helo=eggs.gnu.org) by lists.gnu.org with esmtp (Exim 4.43) id 1Ni9hE-0003EU-4s for help-gnu-emacs@gnu.org; Thu, 18 Feb 2010 11:57:48 -0500 Original-Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.69) (envelope-from ) id 1Ni9hC-0004JE-Ck for help-gnu-emacs@gnu.org; Thu, 18 Feb 2010 11:57:47 -0500 Original-Received: from assert.reddagger.org ([66.211.107.215]:56499 helo=mail.reddagger.org) by eggs.gnu.org with esmtp (Exim 4.69) (envelope-from ) id 1Ni9hC-0004Iu-0A for help-gnu-emacs@gnu.org; Thu, 18 Feb 2010 11:57:46 -0500 Original-Received: by mail.reddagger.org (Postfix, from userid 1007) id 2C2FD18A4156; Thu, 18 Feb 2010 08:57:48 -0800 (PST) Original-Received: from [192.168.1.101] (c-67-164-33-174.hsd1.ca.comcast.net [67.164.33.174]) by mail.reddagger.org (Postfix) with ESMTP id A5C8818A411A; Thu, 18 Feb 2010 08:57:43 -0800 (PST) In-Reply-To: <877hqaojg9.fsf@galatea.lan.informatimago.com> X-Mailer: Evolution 2.24.3 X-detected-operating-system: by eggs.gnu.org: GNU/Linux 2.6, seldom 2.4 (older, 4) X-BeenThere: help-gnu-emacs@gnu.org X-Mailman-Version: 2.1.5 Precedence: list List-Id: Users list for the GNU Emacs text editor List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Original-Sender: help-gnu-emacs-bounces+geh-help-gnu-emacs=m.gmane.org@gnu.org Errors-To: help-gnu-emacs-bounces+geh-help-gnu-emacs=m.gmane.org@gnu.org Xref: news.gmane.org gmane.emacs.help:71931 Archived-At: On Thu, 2010-02-18 at 12:46 +0100, Pascal J. Bourguignon wrote: > dkcombs@panix.com (David Combs) writes: > > > Subj: Perl, etc has these "?"-prefix modifiers/codes/whatever. > > Precisely which does emacs have (and NOT have)? > > > > > > Please, someone, make an ascii or html table or even plain text > > list of all these neat "new" non-standard ops that perl and > > even php and ruby etc seem to have now, comparing them > > to what Emacs has or don't have. > > emacs lisp has a lot of data types. But in lisp, the types are not > associated to the variables, but to the values. Therefore names > (symbols are used to name things in general in lisp) don't need to be > marked in any special way. No, what he wants is for someone to go through and make a list of all the perl lookahead/behind assertions for regular expressions, even though the data is very easily found with a single google search and comes down to pretty much if it has a (? then emacs doesn't have it, because the regexes in emacs haven't been touched since the neolithic. And finally he is looking for a code patch or pointers to where to look for something like this patch you can find with a simple google search: http://emacsbugs.donarmstrong.com/cgi/bugreport.cgi?msg=1;bug=5393 And while I am more than happy to take digs at the lack of basic google searches and lazyweb requests, I do get the sentiment. At this point the entire rest of the world has moved on to perl-style regular expressions a good decade ago, and unlike many things about the world moving in a different direction than emacs, in this case they have more functionality. Lookahead and lookbehind assertions are useful. > In lisps where there is both lexical bindings and dynamic bindings, such > as Common Lisp, there's a convention to distinguish dynamic variable > from lexical variables: > > - Dynamic variables are surrounded by stars: *variable* > > - Lexical variables are surrounded by nothing: variable > > in addition: > > - Constant variables are surrounded by pluses: +variable+ > > But in emacs lisp, there is only dynamic binding, so this convention is > not applied by emacs lisp programmers in general (but Common Lisp > programmers writing emacs lisp code tend to use it, so you may see it > applied for *global-variables* vs. local-variables). > > > Finally, in lisp, a name may have several meanings. We distinguish > often the variable and the function meanings, and call lisps that > distinguish them "lisp-2", while lisps that don't (eg. scheme or LeLisp) > are called "lisp-1". But there are a lot of other meanings a name may > take. For example, in emacs lisp, a same name may be used to variable, > a function, a tagbody tag, a catch tag (catch also takes other objects), > a block name, etc. And moreover, as a programmer, you can add new > meanings to a name by writing new functions and macros (so the > classifications should really be "lisp-infinity+1" vs. "lisp-infinity"). > > Anyways, the distinction of meaning of a name in lisp is not done by the > form of the name, but by the context in which it is found. > > For example, in a function call, a name in first position is interpreted > as a function name, while the same name in the other position would be > interpreted as a variable name. In the case of a block name, the first > argument (second position in the block form) is interpreted as a block > name. > > (defun f (f) (1+ f)) > (let ((f 41)) > (block f > (return-from f (f f)))) ; On this line, first f is a block name, > ; second f is a function name, third f is a variable name. > --> 42 > > > > > Here is an non-exclusive example of the various meaning the name haha > may be attached to in lisp: > > (require 'cl) > > (defmacro show (&rest exprs) > `(progn > ,@(mapcar (lambda (expr) `(insert (format "%60s = %S\n" ',expr ,expr))) exprs))) > > > (defvar haha 0) > (defun haha () 1) > (progn > (let ((haha 3)) > (flet ((haha () 4)) > (block haha > (catch 'haha > (tagbody > (if (zerop haha) (go haha)) > (print '(it was not zero)) > (show haha (symbol-value 'haha) > (haha) (funcall (function haha)) (funcall 'haha)) > (throw 'haha nil) > haha > (print '(it was zero)) > (show haha (symbol-value 'haha) > (haha) (funcall (function haha)) (funcall 'haha)) > (return-from haha t)))))) > (show haha (symbol-value 'haha) > (haha) (funcall (function haha)) (funcall 'haha))) > > (it was not zero) > haha = 3 > (symbol-value (quote haha)) = 3 > (haha) = 4 > (funcall (function haha)) = 4 > (funcall (quote haha)) = 4 > haha = 0 > (symbol-value (quote haha)) = 0 > (haha) = 1 > (funcall (function haha)) = 1 > (funcall (quote haha)) = 1 > > > > (In Common Lisp, output would be different, because it as lexical > bindings as an additionnal meaning for names: > > (IT WAS NOT ZERO) > HAHA = 3 > (SYMBOL-VALUE 'HAHA) = 3 > (HAHA) = 4 > (FUNCALL #'HAHA) = 4 > (FUNCALL 'HAHA) = 1 > HAHA = 0 > (SYMBOL-VALUE 'HAHA) = 0 > (HAHA) = 1 > (FUNCALL #'HAHA) = 1 > (FUNCALL 'HAHA) = 1 > ) > > >