From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from mail-ed1-x532.google.com (mail-ed1-x532.google.com [IPv6:2a00:1450:4864:20::532]) by sourceware.org (Postfix) with ESMTPS id 624283858D37 for ; Sat, 7 Oct 2023 08:39:28 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.4.2 sourceware.org 624283858D37 Authentication-Results: sourceware.org; dmarc=pass (p=none dis=none) header.from=gmail.com Authentication-Results: sourceware.org; spf=pass smtp.mailfrom=gmail.com Received: by mail-ed1-x532.google.com with SMTP id 4fb4d7f45d1cf-5333fb34be3so5048994a12.1 for ; Sat, 07 Oct 2023 01:39:28 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1696667967; x=1697272767; darn=sourceware.org; h=content-transfer-encoding:to:subject:message-id:date:from :in-reply-to:references:mime-version:from:to:cc:subject:date :message-id:reply-to; bh=feYfi+6HjgaM+N8sIXtTR6q5Uju2yJm007BKXD/ikmY=; b=LvSa7RgUj553j2XnAdOPwzOMekAH8xE3cuAVPFdhM//UZCywiYAWCpZ7b6/+Kn2Gxf SkuXm7SMe6wu+7x8ZoHdUMQADnq9D9Zsv4A9fYYuKtD/uURpzW3/0/OteupT9yjUupTi I4h54poOD85+Pqtnp70QfCnswTsAE/sKm7/habSZm7uWhBoRDrVkG5mNucWZVzKSlEdv zQvaQCrt8P8kc2xbELnq62K+5CjkVyDfTl+8A7j7X7CH6b1uEc0lkzjIhtEOlLeNQIS0 vuPPcFjWEx7fVPM2qWW4swdF2rSjDcoKDsU+MJhTzO9ZcXFliZvyrOz0PuyCN3Y8jfac DyfA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1696667967; x=1697272767; h=content-transfer-encoding:to:subject:message-id:date:from :in-reply-to:references:mime-version:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=feYfi+6HjgaM+N8sIXtTR6q5Uju2yJm007BKXD/ikmY=; b=nMWoSVMrEMEhm4u64J051OdnNBni3WTDGXtExYl2LA83I8CNLB5xsPPJfUfJgeJmlr 6WNcNkNOiByFf3o+D//MqmF8C6bZJxJGkpwx4iKPhzwEft+pwUgD2U2S+p2O5WTM0gNE L9ds80fxMGvuyGcJlo+bkGOg6j9kej8tQpG6hfLq9639WJVFavj9OYb7Gkvp38YNYHwb oLplp3dGbgQWRQvDTHo9LORGg/44jqBOX9H2/uSOP5nNY1Ub3ADgxW+2xpKaQ+5NFtN0 rr+hpfBmXnpQ5vye4TNoCaHZfNtxwx7pqBUHLUzsZy1uFcBgV30BxSqXmcTYUcEsk/GT rT/A== X-Gm-Message-State: AOJu0Yyubr4BwggT2qNeNCkFOFJfJKTobR9yoR9A7rXkbpjbhgv+DX/d 6PGJOLEjlH4w9/8Q1iPtnKUuZHRRAuVMuy4Qbnm01KJKZvE= X-Google-Smtp-Source: AGHT+IG1UXxhtnY2t6L86IGrdxJOuI9xaBoAeiqwkevcwLoTf9fsJl8ZMz0tCBQLUp41+ZdgLNFFg4Y76xBNZVCRVmM= X-Received: by 2002:aa7:d1d8:0:b0:522:30cc:a1f4 with SMTP id g24-20020aa7d1d8000000b0052230cca1f4mr9841474edp.0.1696667966646; Sat, 07 Oct 2023 01:39:26 -0700 (PDT) MIME-Version: 1.0 References: In-Reply-To: From: Damien Mattei Date: Sat, 7 Oct 2023 10:39:15 +0200 Message-ID: Subject: Re: rec in kawa? To: kawa mailing list Content-Type: text/plain; charset="UTF-8" Content-Transfer-Encoding: quoted-printable X-Spam-Status: No, score=-0.6 required=5.0 tests=BAYES_00,DKIM_SIGNED,DKIM_VALID,DKIM_VALID_AU,DKIM_VALID_EF,FREEMAIL_FROM,RCVD_IN_DNSWL_NONE,SPF_HELO_NONE,SPF_PASS,TXREP autolearn=ham autolearn_force=no version=3.4.6 X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on server2.sourceware.org List-Id: ok ,from SRFI 31: (define-syntax rec (syntax-rules () ((rec (NAME . VARIABLES) . BODY) (letrec ( (NAME (lambda VARIABLES . BODY)) ) NAME)) ((rec NAME EXPRESSION) (letrec ( (NAME EXPRESSION) ) NAME)))) perheaps a good idea to make it default include in kawa.... #|kawa:1|# (load "Scheme+.scm") #|kawa:2|# (def (bar n) (cond ((=3D n 0) 'end0) ((=3D n 7) (return-rec 'end7)) (else (cons n (bar (- n 1)))))) #|kawa:3|# (bar 5) (5 4 3 2 1 . end0) #|kawa:4|# (bar 10) end7 #|kawa:5|# (def (foo n) (cond ((=3D n 0) 'end0) ((=3D n 7) (return 'end7)) (else (cons n (foo {n - 1}))))) /dev/tty:5:87: invalid character #\} #|kawa:6|# (def (foo n) (cond ((=3D n 0) 'end0) ((=3D n 7) (return 'end7)) (else (cons n (foo (- n 1)))))) #|kawa:7|# (foo 5) (5 4 3 2 1 . end0) #|kawa:8|# (foo 10) (10 9 8 . end7) On Sat, Oct 7, 2023 at 10:32=E2=80=AFAM Damien Mattei wrote: > > i have this definition but i miss rec in kawa: > > ;; scheme@(guile-user)> (def (foo) (when #t (return "hello") "bye")) > ;; scheme@(guile-user)> (foo) > ;; "hello" > > ;; (def x) > > > > ;; (def (foo n) > ;; (cond ((=3D n 0) 'end0) > ;; ((=3D n 7) (return 'end7)) > ;; (else (cons n (foo {n - 1}))))) > > > ;; scheme@(guile-user)> (foo 5) > ;; (5 4 3 2 1 . end0) > ;; scheme@(guile-user)> (foo 10) > ;; (10 9 8 . end7) > > ;; (def (bar n) > ;; (cond ((=3D n 0) 'end0) > ;; ((=3D n 7) (return-rec 'end7)) > ;; (else (cons n (bar {n - 1}))))) > > ;; scheme@(guile-user)> (bar 5) > ;; $4 =3D (5 4 3 2 1 . end0) > ;; scheme@(guile-user)> (bar 10) > ;; $5 =3D end7 > (define-syntax def > > (lambda (stx) > > (syntax-case stx () > > ;; multiple definitions without values assigned > ;; (def (x y z)) > ((_ (var1 ...)) #`(begin (define var1 '()) ...)) > > ;; (def (foo) (when #t (return "hello") "bye")) > ;; ((_ ( ...) * ...) > ;; (let ((ret-id (datum->syntax stx 'return))) > ;; #`(define ( ...) > ;; (call/cc (lambda (#,ret-id) * ...))))) > > > ((_ ( ...) * ...) > > (let ((ret-id (datum->syntax stx 'return)) > (ret-rec-id (datum->syntax stx 'return-rec))) > > #`(define ( ...) > > (call/cc (lambda (#,ret-rec-id) > > (apply (rec (lambda ( ...) > (call/cc (lambda (#,ret-id) * > ...)))) (list ...))))))) > > > > > ;; single definition without a value assigned > ;; (def x) > ((_ var) #`(define var '())) > > ;; (def x 7) > ((_ var expr) #`(define var expr)) > > ((_ err ...) #`(syntax-error "Bad def form")) > > ))) > > > any idea of replacement for it?