From mboxrd@z Thu Jan 1 00:00:00 1970 Path: news.gmane.org!.POSTED!not-for-mail From: Matt Wette Newsgroups: gmane.lisp.guile.user Subject: string-unfold demo Date: Sat, 26 Aug 2017 10:38:14 -0700 Message-ID: <8AE545E7-749B-4EF5-AFD8-7DA4340D1C39@gmail.com> NNTP-Posting-Host: blaine.gmane.org Mime-Version: 1.0 (Mac OS X Mail 10.3 \(3273\)) Content-Type: text/plain; charset=us-ascii Content-Transfer-Encoding: quoted-printable X-Trace: blaine.gmane.org 1503769133 13375 195.159.176.226 (26 Aug 2017 17:38:53 GMT) X-Complaints-To: usenet@blaine.gmane.org NNTP-Posting-Date: Sat, 26 Aug 2017 17:38:53 +0000 (UTC) To: Guile User Original-X-From: guile-user-bounces+guile-user=m.gmane.org@gnu.org Sat Aug 26 19:38:47 2017 Return-path: Envelope-to: guile-user@m.gmane.org Original-Received: from lists.gnu.org ([208.118.235.17]) by blaine.gmane.org with esmtp (Exim 4.84_2) (envelope-from ) id 1dlf2g-0002iy-5g for guile-user@m.gmane.org; Sat, 26 Aug 2017 19:38:42 +0200 Original-Received: from localhost ([::1]:58237 helo=lists.gnu.org) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1dlf2i-0002xe-4u for guile-user@m.gmane.org; Sat, 26 Aug 2017 13:38:44 -0400 Original-Received: from eggs.gnu.org ([2001:4830:134:3::10]:38937) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1dlf2M-0002xZ-O6 for guile-user@gnu.org; Sat, 26 Aug 2017 13:38:23 -0400 Original-Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1dlf2J-0008RL-Kq for guile-user@gnu.org; Sat, 26 Aug 2017 13:38:22 -0400 Original-Received: from mail-pg0-x22e.google.com ([2607:f8b0:400e:c05::22e]:33856) by eggs.gnu.org with esmtps (TLS1.0:RSA_AES_128_CBC_SHA1:16) (Exim 4.71) (envelope-from ) id 1dlf2J-0008R8-EP for guile-user@gnu.org; Sat, 26 Aug 2017 13:38:19 -0400 Original-Received: by mail-pg0-x22e.google.com with SMTP id t193so473973pgc.1 for ; Sat, 26 Aug 2017 10:38:18 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=from:content-transfer-encoding:mime-version:subject:message-id:date :to; bh=chRndPpH/CF+vgZ9HG9zEa7jDAQ+C13NINGQEEc6TdA=; b=g7VDzWSJieiC6wOGcqhf+7Qw7kRd0FAxynZ0qeZ9QrA6+KEvBtNYGXRmBFcG2YloPT oelpur0VFlDIBDtgN/iYnH+VGEc65G2aQt1bcgnbRInLqF3TEqMzdvn6GOKuvX1UAu29 zL32Q4KveaPx0mSxMU942+bHOGzAgShvYsc+Rx+MEUciwMmxyBzP0QCgAuJeuMjePajX m+hU0UQqbNW3MnGc5QTKGlwA8Wsl9QUWr2IXPgOk48Y+CbBj5euPae0Vhw/V6W7uUmSB KJMGNcskhbjqld/GsFe6GFbakBkUOYfuuqURDlrRbfUwfSpm8wuFGdrXo7Ra5dj4HE2u RUVQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:content-transfer-encoding:mime-version :subject:message-id:date:to; bh=chRndPpH/CF+vgZ9HG9zEa7jDAQ+C13NINGQEEc6TdA=; b=s81TZG0BFO/OKK+3DBycYMlgn9CirOevtB8aC+dKPF/ECbvtYjmF1kjWcT4HAgvepG 2yV/ndNZr3+jmOCYAogEMb7Tm0jL+yc9j/gV7cgZrpopM+ZnPigsI4Io2AuaqNAMlHBj P3XfAdSedwGWdXpXy7ZSXTB2UtX3bq+dt5L/dRsFU33QZREmUGA3R9z1LBN/SyjKlFo/ IAtxHrw9vKs0joML7/rfTRK26ulaDo37VcDQTOj4W4/pi7vUCWID3Azpin3H/GxHNDk0 05IKXEKJ08Wy6x+P8cv1yWND91mlJCa4vUmclbZOIcZDSXNRVWa7cFhegEfjSffAbLBc Nz+g== X-Gm-Message-State: AHYfb5hJanHXVUsQzBAzMdSt8DCy9aybA7irIpYnDR78qGBer/cupsRc jAVNu1JH0fyL7+Y/bus= X-Received: by 10.98.8.65 with SMTP id c62mr2315355pfd.267.1503769097060; Sat, 26 Aug 2017 10:38:17 -0700 (PDT) Original-Received: from nautilus.championbroadband.com (216-165-229-229.championbroadband.com. [216.165.229.229]) by smtp.gmail.com with ESMTPSA id t125sm16457866pgc.49.2017.08.26.10.38.16 for (version=TLS1_2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Sat, 26 Aug 2017 10:38:16 -0700 (PDT) X-Mailer: Apple Mail (2.3273) X-detected-operating-system: by eggs.gnu.org: Genre and OS details not recognized. X-Received-From: 2607:f8b0:400e:c05::22e X-BeenThere: guile-user@gnu.org X-Mailman-Version: 2.1.21 Precedence: list List-Id: General Guile related discussions List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: guile-user-bounces+guile-user=m.gmane.org@gnu.org Original-Sender: "guile-user" Xref: news.gmane.org gmane.lisp.guile.user:14058 Archived-At: Just for kicks, to learn string-unfold, I made an ugly version of = string-append: (define (ugly-string-append . str-l) ;; p: seed |-> #t|#f predicate to indicate stop (define (p seed) (null? seed)) ;; f: seed |-> char output function (define (f seed) (string-ref (cddar seed) (caar seed))) ;; g: seed |-> seed transition function (define (g seed) (let* ((head (car seed)) (tail (cdr seed)) (ix (car head)) (ln (cadr head)) (st (cddr = head))) (if (eq? (1+ ix) ln) tail (cons (cons* (1+ ix) ln st) tail)))) ;; s: seed =3D ((ix1 ln1 . st1) (ix2 ln2 . st2) ...) ;; where ix is curr index, ln is string-length, and st is = string (define s (map (lambda (s) (cons* 0 (string-length s) s)) str-l)) (string-unfold p f g s)) (ugly-string-append "abc" "def") =3D> "abcdef"