Path: csiph.com!usenet.pasdenom.info!goblin2!goblin.stu.neva.ru!newsfeed.xs4all.nl!newsfeed5.news.xs4all.nl!xs4all!post.news.xs4all.nl!not-for-mail Return-Path: X-Original-To: python-list@python.org Delivered-To: python-list@mail.python.org X-Spam-Status: OK 0.003 X-Spam-Evidence: '*H*': 0.99; '*S*': 0.00; 'python,': 0.02; 'ideally': 0.05; 'patterns': 0.05; 'useful,': 0.05; 'sql.': 0.07; 'tries': 0.07; 'subject:Python': 0.07; 'chunk': 0.09; 'context': 0.09; 'logic': 0.09; 'relational': 0.09; 'subject:Number': 0.09; 'sure,': 0.09; 'cc:addr:python-list': 0.15; '(it': 0.16; '(other': 0.16; '1:48': 0.16; 'barrier': 0.16; 'entirely.': 0.16; 'explicit': 0.16; 'graph': 0.16; 'immutable': 0.16; 'lisp': 0.16; 'lisp,': 0.16; 'manipulation': 0.16; 'nudge': 0.16; 'prolog,': 0.16; 'quoted': 0.16; 'reasonable.': 0.16; 'ugly.': 0.16; 'verbose,': 0.16; 'suggest': 0.17; 'language': 0.17; 'argument': 0.18; 'certainly': 0.18; 'later': 0.18; 'trying': 0.20; 'programming': 0.21; 'wrote:': 0.21; 'function': 0.22; 'received:209.85.213.46': 0.22; 'received:mail- yw0-f46.google.com': 0.22; 'header:In-Reply-To:1': 0.22; 'software.': 0.23; '(this': 0.23; 'structure': 0.23; 'code.': 0.24; 'input': 0.24; 'run': 0.26; 'cc:no real name:2**0': 0.26; 'message-id:@mail.gmail.com': 0.27; 'cc:addr:python.org': 0.27; 'not,': 0.27; 'language.': 0.27; 'separate': 0.27; 'second': 0.28; 'pm,': 0.28; 'argue': 0.29; 'macros': 0.29; 'nested': 0.29; 'subject: [': 0.29; 'universal': 0.29; 'code': 0.29; 'cc:2**0': 0.31; 'received:209.85': 0.32; 'towards': 0.32; 'received:google.com': 0.32; 'earlier': 0.32; 'operations': 0.32; 'matching': 0.33; 'mode': 0.33; 'processes': 0.33; 'thu,': 0.33; 'leave': 0.34; 'sort': 0.35; 'received:209': 0.35; 'two': 0.35; 'there': 0.35; 'should': 0.35; 'sql': 0.35; 'lists': 0.35; 'things': 0.36; 'really': 0.36; "i'm": 0.36; 'why': 0.36; 'form.': 0.36; 'but': 0.36; 'does': 0.36; 'list': 0.37; '(in': 0.37; 'some': 0.37; 'data': 0.38; 'something': 0.38; 'rather': 0.38; 'common': 0.38; 'client': 0.38; 'list,': 0.38; 'correct': 0.38; 'being': 0.39; 'think': 0.40; 'large': 0.40; 'entire': 0.60; 'your': 0.60; 'mar': 0.61; 'course': 0.61; 'single': 0.61; 'more': 0.63; 'necessarily': 0.64; 'between': 0.64; 'high': 0.65; 'differences': 0.66; 'here': 0.66; 'play': 0.67; 'making': 0.67; '2012': 0.69; 'response.': 0.71; 'honest': 0.72; 'union': 0.72; 'natural': 0.74; 'grow': 0.79; 'default': 0.81; 'obvious': 0.81; 'action.': 0.84; 'circle.': 0.84; 'computation.': 0.84; 'embrace': 0.84; 'entity,': 0.84; 'inherent': 0.84; 'nathan': 0.84; 'notion': 0.84; "program's": 0.84; 'statements.': 0.84; '29,': 0.93 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20120113; h=mime-version:in-reply-to:references:date:message-id:subject:from:to :cc:content-type:content-transfer-encoding; bh=ofPOFX2t3GaTghBm22aW8dsOdQMXj/GR3oqyi5oslRU=; b=aP5xjKRs78UEtpm8PB3eKOiTwKM7evJQWw6OCD3s9P3FjaZIDoJIRkBff6f0IDd6zc YAdAOmB0kPgHrFvpQVoxVYHDnMlLK8O0y6sAfLvi7KhONDlDRxl2gn+F0oEOGe1SCb20 oQgB3jCpZtaMRo2zXlMYwOseCLg8trBWA4fviaR0MUdui7h4FXcTBzci4tJhqYwm4wDu N8eYpkX+ZNFt55sdqKzOQM6V6+gA5ttU+4O9kKb9ADkaFMhONWTrbLPTF2ST2suSDMZt Ly78pxAhNiZMiy5rgSiyyz4NdAmWb1gGiRsQDW27gm7DsIXDmragMaurxJ3zABpIgWD/ IZSw== MIME-Version: 1.0 In-Reply-To: References: Date: Thu, 29 Mar 2012 15:50:37 -0400 Subject: Re: Number of languages known [was Re: Python is readable] - somewhat OT From: Nathan Rice To: Devin Jeanpierre Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: quoted-printable Cc: python-list@python.org X-BeenThere: python-list@python.org X-Mailman-Version: 2.1.12 Precedence: list List-Id: General discussion list for the Python programming language List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Newsgroups: comp.lang.python Message-ID: Lines: 68 NNTP-Posting-Host: 2001:888:2000:d::a6 X-Trace: 1333050641 news.xs4all.nl 6907 [2001:888:2000:d::a6]:46314 X-Complaints-To: abuse@xs4all.nl Xref: csiph.com comp.lang.python:22358 On Thu, Mar 29, 2012 at 2:53 PM, Devin Jeanpierre wrote: > Agreed with your entire first chunk 100%. Woohoo! High five. :) Damn, then I'm not trolling hard enough =E0=B2=A0_=E0=B2=A0 > On Thu, Mar 29, 2012 at 1:48 PM, Nathan Rice > wrote: >> transformations on lists of data are natural in Lisp, but graph >> transformations are not, making some things awkward. > > Eh, earlier you make some argument towards lisp being a universal > metalanguage. If it can simulate prolog, it can certainly grow a graph > manipulation form. You'd just need to code it up as a macro or > function :p Well, a lisp-like language. I would also argue that if you are using macros to do anything, the thing you are trying to do should classify as "not natural in lisp" :) I'm really thinking here more in terms of a general graph reactive system here, matching patterns in an input graph and modifying the graph in response. There are a lot of systems that can be modeled as a graph that don't admit a nested list (tree) description. By having references to outside the nesting structure you've just admitted that you need a graph rather than a list, so why not be honest about it and work in that context from the get-go. >> Additionally, >> because Lisp tries to nudge you towards programming in a functional >> style, it can be un-intuitive to learn. > > I think you're thinking of Scheme here. Common Lisp isn't any more > functional than Python, AFAIK (other than having syntactic heritage > from the lambda calculus?) > > Common-Lisp does very much embrace state as you later describe, Scheme > much less so (in that it makes mutating operations more obvious and > more ugly. Many schemes even outlaw some entirely. And quoted lists > default to immutable (aaaargh)). I find it interesting that John McCarthy invented both Lisp and the situation calculus. As for set/setq, sure, you can play with state, but it is verbose, and there is no inherent notion of temporal locality. Your program's execution order forms a nice lattice when run on hardware, that should be explicit in software. If I were to do something crazy like take the union of two processes that can potentially interact, with an equivalence relation between some time t1 in the first process and a time t2 in the second (so that you can derive a single partial order), the computer should be able to tell if I am going to shoot myself in the foot, and ideally suggest the correct course of action. > Well, what sort of language differences make for English vs Mandarin? > Relational algebraic-style programming is useful, but definitely a > large language barrier to people that don't know any SQL. I think this > is reasonable. (It would not matter even if you gave SQL python-like > syntax, the mode of thinking is different, and for a good reason.) I don't think they have to be. You can view functions as names for temporally ordered sequence of declarative implication statements. Databases just leave out the logic (this is hyperbole, I know), so you have to do it in client code. I don't feel that a database necessarily has to be a separate entity, that is just an artifact of the localized, specialized view of computation. As stronger abstractions are developed and concurrent, distributed computation is rigorously systematized, I think we'll go full circle.