From ruby-talk-admin@ruby-lang.org Thu Dec 15 23:55:19 2005 Received: from kankan.nagaokaut.ac.jp (kankan.nagaokaut.ac.jp [133.44.2.24]) by blade.nagaokaut.ac.jp (8.12.3/8.12.3/Debian-6.6) with ESMTP id jBFEtJZk021731; Thu, 15 Dec 2005 23:55:19 +0900 Received: from funfun.nagaokaut.ac.jp (funfun.nagaokaut.ac.jp [133.44.2.201]) by kankan.nagaokaut.ac.jp (Postfix) with ESMTP id 121D35CE5; Thu, 15 Dec 2005 23:55:20 +0900 (JST) Received: from localhost (localhost.nagaokaut.ac.jp [127.0.0.1]) by funfun.nagaokaut.ac.jp (Postfix) with ESMTP id BD161F04897; Thu, 15 Dec 2005 23:55:23 +0900 (JST) Received: from voscc.nagaokaut.ac.jp (voscc.nagaokaut.ac.jp [133.44.1.100]) by funfun.nagaokaut.ac.jp (Postfix) with ESMTP id 6DF80F04896; Thu, 15 Dec 2005 23:55:22 +0900 (JST) Received: from beryllium.ruby-lang.org (beryllium.ruby-lang.org [210.163.138.100]) by voscc.nagaokaut.ac.jp (Postfix) with ESMTP id 127B3630025; Thu, 15 Dec 2005 23:55:24 +0900 (JST) Received: from beryllium.ruby-lang.org (beryllium.ruby-lang.org [127.0.0.1]) by beryllium.ruby-lang.org (Postfix) with ESMTP id E3C9E33F0C; Thu, 15 Dec 2005 23:55:20 +0900 (JST) Received: from localhost (beryllium.ruby-lang.org [127.0.0.1]) by beryllium.ruby-lang.org (Postfix) with ESMTP id CF74833F0D for ; Thu, 15 Dec 2005 23:55:12 +0900 (JST) Received: from beryllium.ruby-lang.org ([127.0.0.1]) by localhost (beryllium.ruby-lang.org [127.0.0.1]) (amavisd-new, port 10024) with ESMTP id 03813-10 for ; Thu, 15 Dec 2005 23:55:12 +0900 (JST) Received: from nproxy.gmail.com (nproxy.gmail.com [64.233.182.201]) by beryllium.ruby-lang.org (Postfix) with ESMTP id 1E75133F0C for ; Thu, 15 Dec 2005 23:55:11 +0900 (JST) Received: by nproxy.gmail.com with SMTP id g2so135913nfe for ; Thu, 15 Dec 2005 06:55:04 -0800 (PST) Received: by 10.48.240.13 with SMTP id n13mr85989nfh; Thu, 15 Dec 2005 06:55:03 -0800 (PST) Received: by 10.48.234.17 with HTTP; Thu, 15 Dec 2005 06:55:03 -0800 (PST) Delivered-To: ruby-talk@ruby-lang.org Date: Thu, 15 Dec 2005 23:55:13 +0900 Posted: Thu, 15 Dec 2005 16:55:03 +0200 From: Ilmari Heikkinen Reply-To: ruby-talk@ruby-lang.org Subject: Re: LISP to Ruby translation To: ruby-talk@ruby-lang.org (ruby-talk ML) Message-Id: <854c25eb0512150655i598f5831q6e50dba0d7dcd32f@mail.gmail.com> In-Reply-To: References: <126EC586577FD611A28E00A0C9A0375886EB6D@maui.bmsoft.com.au> X-ML-Name: ruby-talk X-Mail-Count: 40 X-MLServer: fml [fml 4.0.3 release (20011202/4.0.3)]; post only (only members can post) X-ML-Info: If you have a question, send e-mail with the body "help" (without quotes) to the address ruby-talk-ctl@ruby-lang.org; help= X-Original-To: ruby-talk@ruby-lang.org DomainKey-Signature: a=rsa-sha1; q=dns; c=nofws; s=beta; d=gmail.com; h=received:message-id:date:from:to:subject:in-reply-to:mime-version:content-type:content-transfer-encoding:content-disposition:references; b=T786VsfMP+33nbFeURB+MmM8WBCA8AFycYdwbMt415UafHykQcmnSG03tm+defIOElzryI/Y9xDgZUV1GB3L9AE5dayQTwc3xx6HjIyFqfriUndp4fxBwp3ZqZB6CkueDufGq8NZfKHXDh49l3HgH8uoAlbYjeM9MzQNKiNuEts= Content-Disposition: inline X-Virus-Scanned: by amavisd-new-20030616-p10 (Debian) at ruby-lang.org X-Spam-Checker-Version: SpamAssassin 3.0.3 (2005-04-27) on beryllium.ruby-lang.org X-Spam-Level: X-Spam-Status: No, score=-14.3 required=7.0 tests=AWL,BAYES_00,BLARS00, BLARS_SPAM00,CONTENT_TYPE_PRESENT,FAKEDWORD_ZERO,QENCPTR2, RCVDFRMLOCALIP,RCVD_BY_IP,RCVD_IN_BLARS,RCVD_IN_BLARS_HOOPS, RCVD_IN_BLARS_SPAM autolearn=ham version=3.0.3 Mime-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Precedence: bulk Lines: 13 List-Id: ruby-talk.ruby-lang.org List-Software: fml [fml 4.0.3 release (20011202/4.0.3)] List-Post: List-Owner: List-Help: List-Unsubscribe: X-Virus-Scanned: by AMaViS snapshot-20020531 Content-Transfer-Encoding: 8bit X-MIME-Autoconverted: from base64 to 8bit by blade.nagaokaut.ac.jp id jBFEtJZk021731 # A bit of fun to while away a boring afternoon class Fixnum def prev self - 1 endend def add a, b return a if b.zero? if b > 0 add a.succ, b.prev else add a.prev, b.succ endend def leval(args) return args unless args.is_a? Array args.map!{|a| if a.is_a? Array leval a else a end } op, *args = args functions[op][args]end def functions { :if => lambda{|args| if leval(args.first) then args[1] else args[2] end }, :zero? => lambda{|args| not (args.first > 0 or args.first < 0) }, :+ => lambda{|args| args.inject{|s,i| add s, i}}, :- => lambda{|args| args.inject{|s,i| add s, -i}} }end p leval([[:if, [:zero?, 0], :+, :-], 3,4])