From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (qmail 91213 invoked by alias); 15 Mar 2017 15:08:49 -0000 Mailing-List: contact kawa-help@sourceware.org; run by ezmlm Precedence: bulk List-Id: List-Subscribe: List-Archive: List-Post: List-Help: , Sender: kawa-owner@sourceware.org Received: (qmail 91073 invoked by uid 89); 15 Mar 2017 15:08:46 -0000 Authentication-Results: sourceware.org; auth=none X-Virus-Found: No X-Spam-SWARE-Status: No, score=-0.3 required=5.0 tests=AWL,BAYES_00,KAM_LAZY_DOMAIN_SECURITY autolearn=no version=3.3.2 spammy=disappointed, H*Ad:U*kawa, cdr, fct X-HELO: smtps-n.oca.eu Received: from smtps-n.oca.eu (HELO smtps-n.oca.eu) (192.54.174.167) by sourceware.org (qpsmtpd/0.93/v0.84-503-g423c35a) with ESMTP; Wed, 15 Mar 2017 15:08:36 +0000 Received: from [192.168.109.88] (natoca100-13.unice.fr [134.59.100.13]) by smtps-n.oca.eu (Postfix) with ESMTPSA id 568A18012C for ; Wed, 15 Mar 2017 16:08:34 +0100 (CET) From: Damien MATTEI To: Kawa mailing list Subject: StackOverflowError in a specialized map Date: Wed, 15 Mar 2017 15:08:00 -0000 User-Agent: KMail/1.9.6 MIME-Version: 1.0 Content-Type: text/plain; charset="us-ascii" Content-Transfer-Encoding: 7bit Content-Disposition: inline Message-Id: <201703151608.33735.Damien.Mattei@unice.fr> X-IsSubscribed: yes X-SW-Source: 2017-q1/txt/msg00075.txt.bz2 Hello, i have a custom definition of map ( https://github.com/damien-mattei/LOGIKI/blob/master/lib/map.scm at line 392): ;; map-nil : a map version that exclude nil results ;; the same as map-with-lambdas but will exclude from the result list the '() result of function ;; ;; (map-nil + '(1 2 3) '(4 5 6)) -> '(5 7 9) (define map-nil (lambda (function list1 . more-lists) (letrec ((some? (lambda (fct list) ;; returns #f if (function x) returns #t for ;; some x in the list (and (pair? list) (or (fct (car list)) (some? fct (cdr list))))))) ;; variadic map implementation terminates ;; when any of the argument lists is empty. (let ((lists (cons list1 more-lists))) (if (some? null? lists) '() (let ((funct-result (apply function (map car lists)))) (if (null? funct-result) (apply map-nil function (map cdr lists)) (cons funct-result (apply map-nil function (map cdr lists)))))))))) i use it in various project since many years and this times it creates a java StackOverflowError on a big list (22527 elements), i'm not sure if it's only in kawa and java that the problem occur so i'm near to code this function differently, the error appears both in a Tomcat web app and at REPL: #|kawa:1|# (require 'regex) #|kawa:2|# (include-relative "../git/LOGIKI/lib/syntactic-sugar.scm") #|kawa:3|# (include-relative "../git/LOGIKI/lib/display.scm") #|kawa:4|# (include-relative "../git/LOGIKI/lib/case.scm") ;; for CASE with STRINGS #|kawa:5|# (include-relative "../git/LOGIKI/lib/map.scm") ;; for map-nil /home/mattei/Dropbox/Jkawa/../git/LOGIKI/lib/map.scm:128:12: warning - no declaration seen for remove-last /home/mattei/Dropbox/Jkawa/../git/LOGIKI/lib/map.scm:128:30: warning - no declaration seen for rest #|kawa:6|# (include-relative "../git/LOGIKI/lib/list.scm") ;; for remove-last used by map.scm /home/mattei/Dropbox/Jkawa/../git/LOGIKI/lib/list.scm:14:10: warning - no declaration seen for rest /home/mattei/Dropbox/Jkawa/../git/LOGIKI/lib/list.scm:17:32: warning - no declaration seen for rest /home/mattei/Dropbox/Jkawa/../git/LOGIKI/lib/list.scm:28:22: warning - no declaration seen for first /home/mattei/Dropbox/Jkawa/../git/LOGIKI/lib/list.scm:29:17: warning - no declaration seen for first /home/mattei/Dropbox/Jkawa/../git/LOGIKI/lib/list.scm:29:51: warning - no declaration seen for rest /home/mattei/Dropbox/Jkawa/../git/LOGIKI/lib/list.scm:35:25: warning - no declaration seen for first /home/mattei/Dropbox/Jkawa/../git/LOGIKI/lib/list.scm:35:56: warning - no declaration seen for rest /home/mattei/Dropbox/Jkawa/../git/LOGIKI/lib/list.scm:39:27: warning - no declaration seen for rest /home/mattei/Dropbox/Jkawa/../git/LOGIKI/lib/list.scm:62:12: warning - no declaration seen for rest #|kawa:7|# (include-relative "../git/LOGIKI/lib/first-and-rest.scm") #|kawa:8|# (define wds-url "http://ad.usno.navy.mil/wds/Webtextfiles/wdsnewref.txt") #|kawa:9|# (define wds-data-str &<{&[wds-url]}) ;; could take a few seconds to GET file #|kawa:10|# (define wds-data-str-split (regex-split (string #\linefeed) wds-data-str)) #|kawa:11|# (length wds-data-str-split) 22527 #|kawa:12|# (define test1 (map (lambda (x) x) wds-data-str-split) #|(---:13|# ) #|kawa:14|# (length test1) 22527 #|kawa:15|# (define test2 (map-nil (lambda (x) x) wds-data-str-split)) Exception in thread "main" java.lang.StackOverflowError at kawa.lib.lists.isNull(lists.scm:21) at kawa.lib.lists.apply1(lists.scm:20) at gnu.expr.ModuleBody.applyN(ModuleBody.java:243) at gnu.expr.ModuleMethod.applyN(ModuleMethod.java:237) at gnu.kawa.functions.ApplyToArgs.applyN(ApplyToArgs.java:141) at gnu.mapping.ProcedureN.apply2(ProcedureN.java:39) at atInteractiveLevel-5.lambda7$V(stdin:10384) at atInteractiveLevel-5.applyN(stdin:10379) at gnu.expr.ModuleMethod.applyN(ModuleMethod.java:237) at gnu.kawa.functions.ApplyToArgs.applyN(ApplyToArgs.java:141) at gnu.kawa.functions.Apply.applyN(Apply.java:74) at gnu.mapping.ProcedureN.apply3(ProcedureN.java:48) at atInteractiveLevel-5.lambda7$V(stdin:10396) at atInteractiveLevel-5.applyN(stdin:10379) at gnu.expr.ModuleMethod.applyN(ModuleMethod.java:237) at gnu.kawa.functions.ApplyToArgs.applyN(ApplyToArgs.java:141) at gnu.kawa.functions.Apply.applyN(Apply.java:74) at gnu.mapping.ProcedureN.apply3(ProcedureN.java:48) at atInteractiveLevel-5.lambda7$V(stdin:10396) at atInteractiveLevel-5.applyN(stdin:10379) at gnu.expr.ModuleMethod.applyN(ModuleMethod.java:237) at gnu.kawa.functions.ApplyToArgs.applyN(ApplyToArgs.java:141) at gnu.kawa.functions.Apply.applyN(Apply.java:74) at gnu.mapping.ProcedureN.apply3(ProcedureN.java:48) at atInteractiveLevel-5.lambda7$V(stdin:10396) at atInteractiveLevel-5.applyN(stdin:10379) at gnu.expr.ModuleMethod.applyN(ModuleMethod.java:237) at gnu.kawa.functions.ApplyToArgs.applyN(ApplyToArgs.java:141) at gnu.kawa.functions.Apply.applyN(Apply.java:74) at gnu.mapping.ProcedureN.apply3(ProcedureN.java:48) at atInteractiveLevel-5.lambda7$V(stdin:10396) at atInteractiveLevel-5.applyN(stdin:10379) at gnu.expr.ModuleMethod.applyN(ModuleMethod.java:237) at gnu.kawa.functions.ApplyToArgs.applyN(ApplyToArgs.java:141) at gnu.kawa.functions.Apply.applyN(Apply.java:74) at gnu.mapping.ProcedureN.apply3(ProcedureN.java:48) at atInteractiveLevel-5.lambda7$V(stdin:10396) at atInteractiveLevel-5.applyN(stdin:10379) at gnu.expr.ModuleMethod.applyN(ModuleMethod.java:237) at gnu.kawa.functions.ApplyToArgs.applyN(ApplyToArgs.java:141) at gnu.kawa.functions.Apply.applyN(Apply.java:74) at gnu.mapping.ProcedureN.apply3(ProcedureN.java:48) at atInteractiveLevel-5.lambda7$V(stdin:10396) at atInteractiveLevel-5.applyN(stdin:10379) at gnu.expr.ModuleMethod.applyN(ModuleMethod.java:237) at gnu.kawa.functions.ApplyToArgs.applyN(ApplyToArgs.java:141) at gnu.kawa.functions.Apply.applyN(Apply.java:74) at gnu.mapping.ProcedureN.apply3(ProcedureN.java:48) at atInteractiveLevel-5.lambda7$V(stdin:10396) at atInteractiveLevel-5.applyN(stdin:10379) at gnu.expr.ModuleMethod.applyN(ModuleMethod.java:237) at gnu.kawa.functions.ApplyToArgs.applyN(ApplyToArgs.java:141) at gnu.kawa.functions.Apply.applyN(Apply.java:74) at gnu.mapping.ProcedureN.apply3(ProcedureN.java:48) at atInteractiveLevel-5.lambda7$V(stdin:10396) at atInteractiveLevel-5.applyN(stdin:10379) at gnu.expr.ModuleMethod.applyN(ModuleMethod.java:237) at gnu.kawa.functions.ApplyToArgs.applyN(ApplyToArgs.java:141) at gnu.kawa.functions.Apply.applyN(Apply.java:74) at gnu.mapping.ProcedureN.apply3(ProcedureN.java:48) at atInteractiveLevel-5.lambda7$V(stdin:10396) at atInteractiveLevel-5.applyN(stdin:10379) at gnu.expr.ModuleMethod.applyN(ModuleMethod.java:237) at gnu.kawa.functions.ApplyToArgs.applyN(ApplyToArgs.java:141) at gnu.kawa.functions.Apply.applyN(Apply.java:74) at gnu.mapping.ProcedureN.apply3(ProcedureN.java:48) at atInteractiveLevel-5.lambda7$V(stdin:10396) at atInteractiveLevel-5.applyN(stdin:10379) at gnu.expr.ModuleMethod.applyN(ModuleMethod.java:237) at gnu.kawa.functions.ApplyToArgs.applyN(ApplyToArgs.java:141) at gnu.kawa.functions.Apply.applyN(Apply.java:74) at gnu.mapping.ProcedureN.apply3(ProcedureN.java:48) at atInteractiveLevel-5.lambda7$V(stdin:10396) at atInteractiveLevel-5.applyN(stdin:10379) at gnu.expr.ModuleMethod.applyN(ModuleMethod.java:237) at gnu.kawa.functions.ApplyToArgs.applyN(ApplyToArgs.java:141) at gnu.kawa.functions.Apply.applyN(Apply.java:74) at gnu.mapping.ProcedureN.apply3(ProcedureN.java:48) at atInteractiveLevel-5.lambda7$V(stdin:10396) at atInteractiveLevel-5.applyN(stdin:10379) at gnu.expr.ModuleMethod.applyN(ModuleMethod.java:237) at gnu.kawa.functions.ApplyToArgs.applyN(ApplyToArgs.java:141) at gnu.kawa.functions.Apply.applyN(Apply.java:74) at gnu.mapping.ProcedureN.apply3(ProcedureN.java:48) at atInteractiveLevel-5.lambda7$V(stdin:10396) at atInteractiveLevel-5.applyN(stdin:10379) .... i think the 22527 elements list is too much for some recursion i use in my recursive functions (map-nil), i'm a bit disappointed about scheme today, i thought my code was robust,but seems not... it works with the original map ,i'm wondering how map is implemented ? i like coding in a recursive way , should i rewrite this with some iteration? Regards, Damien -- Damien.Mattei@unice.fr, Damien.Mattei@oca.eu, UNS / OCA / CNRS