From mboxrd@z Thu Jan 1 00:00:00 1970 Path: news.gmane.io!.POSTED.blaine.gmane.org!not-for-mail From: Stefan Monnier Newsgroups: gmane.emacs.devel Subject: Re: Negative nth index Date: Tue, 24 Dec 2024 00:11:26 -0500 Message-ID: References: <865xnc6u9n.fsf@gnu.org> <87jzbs9jlk.fsf@gnu.org> Mime-Version: 1.0 Content-Type: text/plain Injection-Info: ciao.gmane.io; posting-host="blaine.gmane.org:116.202.254.214"; logging-data="3733"; mail-complaints-to="usenet@ciao.gmane.io" User-Agent: Gnus/5.13 (Gnus v5.13) Cc: Tassilo Horn , Eli Zaretskii , Anand Tamariya , emacs-devel@gnu.org To: Stefan Kangas Original-X-From: emacs-devel-bounces+ged-emacs-devel=m.gmane-mx.org@gnu.org Tue Dec 24 06:12:22 2024 Return-path: Envelope-to: ged-emacs-devel@m.gmane-mx.org Original-Received: from lists.gnu.org ([209.51.188.17]) by ciao.gmane.io with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.92) (envelope-from ) id 1tPxDS-0000q7-8U for ged-emacs-devel@m.gmane-mx.org; Tue, 24 Dec 2024 06:12:22 +0100 Original-Received: from localhost ([::1] helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1tPxCf-0007vl-Na; Tue, 24 Dec 2024 00:11:33 -0500 Original-Received: from eggs.gnu.org ([2001:470:142:3::10]) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1tPxCd-0007vZ-K6 for emacs-devel@gnu.org; Tue, 24 Dec 2024 00:11:31 -0500 Original-Received: from mailscanner.iro.umontreal.ca ([132.204.25.50]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1tPxCc-00022g-2B; Tue, 24 Dec 2024 00:11:31 -0500 Original-Received: from pmg1.iro.umontreal.ca (localhost.localdomain [127.0.0.1]) by pmg1.iro.umontreal.ca (Proxmox) with ESMTP id D736410004C; Tue, 24 Dec 2024 00:11:27 -0500 (EST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=iro.umontreal.ca; s=mail; t=1735017087; bh=4bsY9LpUIqSYJASJuLwiuJfJ+iCqxihSGcI+Li6mTzg=; h=From:To:Cc:Subject:In-Reply-To:References:Date:From; b=ZRZz3xk254FFhY+SeOKPmUwiu3Ku8NX2QKhcCZeATqTzS5SZDvJRCMO1lfpEnK47B bL8tc8YZA2J/mZnGEYs3boxOc2+CvPwpIXeY7TiPV+CCPmVGhFLCB8aWFsse121CNy ZqofOxYG4IFi3LuDc+WspG+mYzRmVPtq0wlcUToPaLBsY22IBk/F00Jzoo/ALRj3UW z7ekVa2DFGrqx6S+snZ11RjD+Kp4T5Q16uubaynJx3bp+BeoGW1ItgaQlUFwfdhrdo iYnv7xH6Od0mgm40mYfDu5QAEUezKNJbzJfvsEN+YtsVgwybtsFuzPIAXHN1WE2IDr /j1E0fPcbXG3g== Original-Received: from mail01.iro.umontreal.ca (unknown [172.31.2.1]) by pmg1.iro.umontreal.ca (Proxmox) with ESMTP id 21AAD100035; Tue, 24 Dec 2024 00:11:27 -0500 (EST) Original-Received: from pastel (104-195-225-43.cpe.teksavvy.com [104.195.225.43]) by mail01.iro.umontreal.ca (Postfix) with ESMTPSA id DB22D12005D; Tue, 24 Dec 2024 00:11:26 -0500 (EST) In-Reply-To: (Stefan Kangas's message of "Mon, 23 Dec 2024 05:40:36 +0000") Received-SPF: pass client-ip=132.204.25.50; envelope-from=monnier@iro.umontreal.ca; helo=mailscanner.iro.umontreal.ca X-Spam_score_int: -42 X-Spam_score: -4.3 X-Spam_bar: ---- X-Spam_report: (-4.3 / 5.0 requ) BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, RCVD_IN_DNSWL_MED=-2.3, RCVD_IN_VALIDITY_RPBL_BLOCKED=0.001, RCVD_IN_VALIDITY_SAFE_BLOCKED=0.001, SPF_HELO_NONE=0.001, SPF_PASS=-0.001 autolearn=ham autolearn_force=no X-Spam_action: no action X-BeenThere: emacs-devel@gnu.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: "Emacs development discussions." List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: emacs-devel-bounces+ged-emacs-devel=m.gmane-mx.org@gnu.org Original-Sender: emacs-devel-bounces+ged-emacs-devel=m.gmane-mx.org@gnu.org Xref: news.gmane.io gmane.emacs.devel:326959 Archived-At: >>>> Should negative index for nth be valid? e.g. >>>> (nth -1 '(1 2)) returns 1 [ I'd make it return 2 otherwise you can't use it to return the last element. ] >>> What does this do in other Lisps? >> In CL, it errors (ditto for nthcdr with negative index). Same for (nth >> '(1 2 3) -1) in Clojure or (list-ref '(1 2 3) -1) in Scheme. > Stefan Monnier, any comments here? I don't see a strong argument in favor of making it index from the end rather than signal an error. What would the implementation look like? Would it be significantly more efficient than doing it "by hand" e.g.: (let ((l (length X))) (nth (if (< i 0) (- l i) i) X)) - Stefan