[Chicken-users] [4.7.0.3-st] Compiling on Solaris 10
Hello Chickeners, today I tried to compile the latest stable Chicken, 4.7.0.3-st on Solaris 10 (sparc), only to find out the the build fails: I used gmake PLATFORM=SunOS PREFIX=$HOME and make signalled a circular dependency while looking for apply-hack.sparc.S. As it turns out, there is a apply-hack.sparc64.S... but nothing for the other. I am not familiar with the sparc architecture, so I am looking for advice on what to do. Also please tell me if you need more information. Thank you in advance for your answers. -- Nicolas ___ Chicken-users mailing list Chicken-users@nongnu.org https://lists.nongnu.org/mailman/listinfo/chicken-users
Re: [Chicken-users] [4.7.0.3-st] Compiling on Solaris 10
Hello John, Thank you for your suggestions. Here is the next episode of my sparc adventures... On Thu, Nov 10, 2011 at 00:36, John Cowan wrote: > > Currently, sparc is not a supported CPU. The first thing is to add it > to the list of known CPU architectures. Add the line > > sparc) echo "sparc";; I added the line as: sun4u) echo "sparc";; since this is what uname -m says. > 1) Try copying apply-hack.sparc64.S to apply-hack.sparc.S and hope > it works. If it does build, be sure to run the tests. This does not work. The assembler complains about setx, ldx... saying instructions from a set more recent than sparcv8 are unsupported. Fair enough. Looking at what the code does, it seems it expects the number of arguments, and a base address for a function, treats the first 6 arguments as passed through registers and loads the rest from the stack. Hmm... Now, looking a little at the output of objects with objdump and dbx, here is how things look like on this machine: the object format is elf32-sparc. I am unsure about the C ABI. the addresses are 32-bit the global and output registers seem to be 64 bits wide, the local and input registers 32 bits wide (weird, maybe wrong). There are some magic constants in the apply-hack.sparc64.S file which I do not understand. What is the 2047? And the 176? The code just before these looks as if it already reserved a "window" for the registers on the stack, so what is this? In the case of sparc, if it is possible to use the same general scheme (no pun intended), I would have to replace ldx, sllx and co with shorter instructions, saving the higher, then the lower part of the %g and %o registers I suppose... And of course, modify the various other constants (8, -2, 3) to accomodate for the different register width. Does this make any kind of sense? > 2) If that fails, try disabling APPLY_HACK by adding the following patch > to Makefile.solaris after the comment line "# options": > > ifeq ($(ARCH),sparc) > APPLY_HACK= > endif > > As far as I know, nobody has tried to build Chicken without an apply-hack > in a long time. This was a simple thing to do, but did not work. As the first part of installilng chicken, I must first bootstrap it, with: gmake PLATFORM=solaris CHICKEN=/bin/true PREFIX=$HOME boot-chicken and after compiling for a few moments, the build fails with: gcc -fno-strict-aliasing -fwrapv -DHAVE_CHICKEN_CONFIG_H -DC_ENABLE_PTABLES -c c-backend.c -o c-backend-static.o -I. -I./ gmake[2]: *** No rule to make target `apply-hack.sparc.S', needed by `apply-hack.sparc.o'. Stop. Note on the /bin/true part: README is lying ;-) There is no bootstrap compiler included in the stable releases (1st lie), and there is no pre-compiled bootstrap compiler to be downloaded from the Chicken site (2nd lie). But thankfully the .c files are already there, so the vicious circle of having chicken to bootstrap chicken does not happen. Advice, comments, directions are most welcome. -- Nicolas ___ Chicken-users mailing list Chicken-users@nongnu.org https://lists.nongnu.org/mailman/listinfo/chicken-users
Re: [Chicken-users] [4.7.0.3-st] Compiling on Solaris 10
Hello Mario, On Thu, Nov 10, 2011 at 20:05, Mario Domenech Goulart wrote: > Hi Nicolas, > > On Thu, 10 Nov 2011 20:10:10 +0900 Nicolas Pelletier > wrote: > >> Note on the /bin/true part: README is lying ;-) There is no bootstrap >> compiler included in the stable releases (1st lie), and there is no >> pre-compiled bootstrap compiler to be downloaded from the Chicken site >> (2nd lie). > > I don't get the 1st lie. What section mentions that? I am refering to the secion "6. Bootstrapping" in README: make PLATFORM= CHICKEN= boot-chicken When I read this, I thought "path-to-existing-chicken" meant there was an existing chicken included, which is not the case. On re-reading, I am not sure this is what was meant... but telling the user to point to an existing chicken when they are trying to bootstrap is certainly confusing. > The second lie has been fixed in the chicken-core git repository. That was fast! Thank you! -- Nicolas ___ Chicken-users mailing list Chicken-users@nongnu.org https://lists.nongnu.org/mailman/listinfo/chicken-users
[Chicken-users] chicken-install from behind a proxy?
Hello, I successfully installed Chicken 4.2.0 on my machine (Debian 5.0, 64 bits Intel). However, I cannot install any eggs; the problem seems to be that I am sitting behind a proxy: > nico...@dynamo:~/dev$ chicken-install kanren > retrieving ... > connecting to host "chicken.kitten-technologies.co.uk", port 80 ... > TCP connect timeout > connecting to host "galinha.ucpel.tche.br", port 80 ... > TCP connect timeout > Error: extension or version not found FWIW, the error message says "TCP connect timeout", but a network capture shows that this is really the name resolution which is failing (which is just a peculiarity of the network setup here). I had previously no problems using chicken-setup and chicken-3.2.7 (chicken-setup -proxy my_proxy.xxx:8080 kanren successfully installed the kanren egg). Could you please help me around this problem? In case this is one feature that is already on the todo list for chicken-install (and just hasn't been ported from chicken-setup yet), I'd appreciate any hints as to which files and functions to modify to make this work. Thanks in advance, -- Nicolas ___ Chicken-users mailing list Chicken-users@nongnu.org http://lists.nongnu.org/mailman/listinfo/chicken-users
Re: [Chicken-users] chicken-install from behind a proxy?
Hello, On Wed, Nov 25, 2009 at 8:34 PM, Mario Domenech Goulart wrote: > > Felix has just implemented this feature. See > http://chicken.wiki.br/cgi-bin/gitweb/gitweb.cgi?p=chicken-core.git;a=commit;h=895a4d51277071deee6cfe0f0e2a04f0bc10813e Thank you. I tried the patch over a vanilla 4.2.0. I am now able to see the download going through the proxy, but the installation still fails with the following error: > reading files ... > ./kanren.scm > Error: invalid file name - possibly corrupt transmission: |# > "./kanren-runtime.scm" 82966 > ; The body of KANREN > ; > ; The appropriate prelu... Inspecting what is really received on the wire shows that the data begins with a newline followed by this line: #||# "./kanren.scm" 83807 It looks like the (read) operation in setup-download.scm (line 250 for me) does not skip over the last |#. Any ideas what might be causing this? Regards, -- Nicolas ___ Chicken-users mailing list Chicken-users@nongnu.org http://lists.nongnu.org/mailman/listinfo/chicken-users
Re: [Chicken-users] Re: ... and a happy new year as well!
Hello, On Fri, Jan 8, 2010 at 1:06 AM, Christian Kellermann wrote: > * Ivan Shmakov [100107 17:00]: >> PS. Currently, I'm about to begin my preparations for the course on >> computer networks I'd be carrying on for the second time. While >> no part of the course the course has a specific focus on the >> network programming, I'd be glad to hear any suggestions on how >> Scheme (and functional programming in general) could be >> mentioned. I'd suggest protocol analysis or traffic inspection. Chicken's support for low-level access and easy ffi lets you hook almost anywhere in the network stack. Then Scheme's power lets you use more advanced tools for analysis (e.g. using a true parser to analyze a protocol, for example with the packrat egg). On top of that, you can hook some reasoning capabilities (for example, with the kanren egg) to detect intrusions, attacks, questionnable traffic, or suggest an optimal network configuration, etc... Or you can go for server-side programming, for example cgi, connection pooling, access policy... or even (gasp!) cloud computing (for example, cluster or cloud controllers); the kind of thing that is traditionally done in C with complicated data structures, a lot of pointers, and no help from GC, closures, or symbolic programming. And takes a lot of effort and money to develop and debug :-) Another hot topic today is the semantic web (RDF, OWL and friends). This is an area where high-level languages with dynamic and reasoning capabilities (e.g. Scheme, Lisp, Prolog, for example) shine. Whether you want to see the network from behind HTTP or not is up to you, of course. That's it for a few ideas. -- Nicolas ___ Chicken-users mailing list Chicken-users@nongnu.org http://lists.nongnu.org/mailman/listinfo/chicken-users
Re: [Chicken-users] procedure memoization
Hello, On Sat, Feb 13, 2010 at 5:53 AM, Hugo Arregui wrote: > > there's a standard implementation for procedures memoization? Srfi or egg? R5RS says that the result of forcing a promise is memoized. So you might want to do something along the lines of: (let ((x (delay (begin (print "Hi!") 1 (print (force x)) (print (force x))) Hi! 1 1 HTH, -- Nicolas ___ Chicken-users mailing list Chicken-users@nongnu.org http://lists.nongnu.org/mailman/listinfo/chicken-users
Re: [Chicken-users] Implementing a remote REPL, can't see definitions
Hello, On Sun, May 23, 2010 at 5:12 AM, Stephen Eilert wrote: > > However, I cannot evaluate any definitions from the rest of the > program. It seems that I can create new ones, though. Are you saying that the bindings established by the rest of the program are not seen by eval ? If so, are you aware of the following construct (taken from http://community.schemewiki.org/?scheme-faq-misc#sicp) ? ((eval `(begin (define ,name #f) (lambda (val) (set! ,name val))) (interaction-environment)) value) Piping the needed values through lambda as in the above will let you control which definitions can be used, and might be enough for what you are trying to achieve. > I am not passing any other arguments to eval, so I suppose it is using > (interaction-environment). Correct. This means that a new interaction environment will be generated each time eval is called. Hope this helps, -- Nicolas ___ Chicken-users mailing list Chicken-users@nongnu.org http://lists.nongnu.org/mailman/listinfo/chicken-users
Re: [Chicken-users] import and srfi-1
Hello, you can do it the following way by generating the import module for test.scm: nico...@dynamo:~/tmp$ cat test.scm (module test (rev) (import scheme) (import srfi-1) (require-extension srfi-1) (define (rev ls) (fold cons '() ls)) ) nico...@dynamo:~/tmp$ cat toto.scm (require-extension test) (display (rev (list 1 2 3 4 5))) (newline) nico...@dynamo:~/tmp$ csc -s -j test test.scm nico...@dynamo:~/tmp$ csc toto.scm nico...@dynamo:~/tmp$ ./toto (5 4 3 2 1) Regards, -- Nicolas ___ Chicken-users mailing list Chicken-users@nongnu.org http://lists.nongnu.org/mailman/listinfo/chicken-users
Re: [Chicken-users] import and srfi-1
Hello, On Fri, Jul 23, 2010 at 6:52 PM, Moritz Heidkamp wrote: > Hi, > > Nicolas Pelletier writes: >> nico...@dynamo:~/tmp$ csc -s -j test test.scm >> nico...@dynamo:~/tmp$ csc toto.scm >> nico...@dynamo:~/tmp$ ./toto > > just a little hint: the disadvantage of this is that you either have to > delete the test.so or recompile test.scm for every change you make. You > can however use csc -Jt test.scm which will only generate the test.c but > also the test.import.scm which you can use for requiring test.scm. Quite > convenient! Remember to run csc -Jt again whenever you change the > exports of the test module however :-) Indeed, this is more convenient. Thank you for pointing this out! -- Nicolas ___ Chicken-users mailing list Chicken-users@nongnu.org http://lists.nongnu.org/mailman/listinfo/chicken-users
[Chicken-users] current-time on 32-bit hardware
Hello, I've run into the following problem. I am taking a mutex with a time-out, as follows: (mutex-lock! children-mutex (seconds->time (+ 1 (time->seconds (current-time) And I got the following error: Warning (#): : (inexact->exact) inexact number cannot be represented as an exact\ number: 1189553855. Looking at srfi-18.scm, the implementation of current-time is: (define (current-time) (let* ([s C_get_seconds] [ss C_startup_time_seconds] [ms C_ms] ) (##sys#make-structure 'time (inexact->exact (truncate (+ (* (- s ss) 1000) C_ms))) s C_ms) ) ) Due to the different representation of integers between C and chicken (32 bits in C, 30 in chicken if I'm not mistaken), the above inexact->exact fails. I am using 4.3.0, but the implementation of current-time in 4.5.0 is the same. On one hand, using 64-bit hardware instead is not an option. On the other hand, I just need mutex-lock! to not wait forever; waiting a little more than one second is okay. Could someone suggest a workaround and/or a fix, please? Regards, -- Nicolas ___ Chicken-users mailing list Chicken-users@nongnu.org http://lists.nongnu.org/mailman/listinfo/chicken-users
Re: [Chicken-users] current-time on 32-bit hardware
>> Warning (#): : (inexact->exact) inexact number >> cannot be represented as an exact\ >> number: 1189553855. >> > > I can not reproduce this. On what platform are you running this > code? It is a 32-bit Linux on a Pentium R. If my understanding is correct, the following call is subject to overflow (e.g. inexact->exact is called on a number that would have its bit 30 set if represented as an integer) after the process has been running for running for 12 days 10 hours 15 minutes 41 seconds. So yes, it is not immediately reproducible ;-) (inexact->exact (truncate (+ (* (- s ss) 1000) C_ms))) As a workaround, I can use immediate integers instead of timeout objects in the calls to thread-sleep! and mutex-lock!, at the expense of a few milliseconds time slip. Regards, -- Nicolas ___ Chicken-users mailing list Chicken-users@nongnu.org http://lists.nongnu.org/mailman/listinfo/chicken-users
Re: [Chicken-users] current-time on 32-bit hardware
On Thu, Jul 29, 2010 at 6:01 PM, Peter Bex wrote: > On Thu, Jul 29, 2010 at 05:34:27PM +0900, Nicolas Pelletier wrote: >> >> Warning (#): : (inexact->exact) inexact number >> >> cannot be represented as an exact\ >> >> number: 1189553855. >> >> >> > >> > I can not reproduce this. On what platform are you running this >> > code? >> >> It is a 32-bit Linux on a Pentium R. > > That's why Felix couldn't reproduce it; I'm willing to bet he tried it > on 64 bits only. > This number cannot be represented as a fixnum on a 32 bit platform, > because it requires 31 bits of storage. There are only 30 bits available, > because one bit is used as fixnum tag and one bit is taken as the sign bit. Yes. I know this from exchanging data between C and Scheme processes. Values like 0x8000A010 were not going smoothly through at first. > I'd suggest you use numbers but I don't think thread-sleep! accepts > bignums. For my current needs, I only need small fixnums, so using numbers is enough, and seems like the way to go for an immediate solution. >> As a workaround, I can use immediate integers instead of timeout >> objects in the calls to thread-sleep! and mutex-lock!, at the expense >> of a few milliseconds time slip. > > huh? I don't understand that bit. I wanted to say the difference in behaviour between the two clocks below, for example, is not an issue for my current program. ; a clock with a gradual drift: (let loop ((x 1)) (thread-sleep! 1) (write x) (loop (+ x 1))) ; a clock with no drift: (let ((start (time->seconds (current-time))) (let loop ((x 1)) (thread-sleep! (seconds->time (+ x start))) (write x) (loop (+ x 1 Regards, -- Nicolas ___ Chicken-users mailing list Chicken-users@nongnu.org http://lists.nongnu.org/mailman/listinfo/chicken-users
Re: [Chicken-users] current-time on 32-bit hardware
From: Peter Bex Subject: Re: [Chicken-users] current-time on 32-bit hardware Date: Thu, 29 Jul 2010 11:01:26 +0200 On Thu, Jul 29, 2010 at 7:12 PM, Felix wrote: Peter Bex wrote: > > I'd suggest you use numbers but I don't think thread-sleep! accepts > > bignums. Felix replied: > That won't change anything. You are right, and using only small values for timeouts does not help either. > No, the reason for this is that the scheduler uses fixnums in timeout > checks for performance reasons and because of this, the time objects > store time spans as fixnums as well. This will probably have to be > changed to use flonums. I am currently looking at ##sys#schedule. The time-out queue only needs to hold time offsets from "now". I suppose the reason for having "now" (aka ##sys#fudge 16) sitting around here is to find out whether C_msleep slept too long and fire the events the scheduler might have missed. But since there are no guaranties from the OS that we will not actually sleep a bit too much, I'm thinking of representing the current point in time with a plain 0 and replacing (if (>= now tmo1) ...) by (if (>= how-much-i-slept tmo1) ...), with how-much-i-slept being the time I asked to sleep for. I expect thus to be able to still use fixnums to represent time-outs while avoiding the "13 days since startup" issue. The maximum for time-outs would then be 2**29 ms, or 6 days 5 hours or so, which does not sound as a limitation to me. Does anybody have any objections to this? Regards, -- Nicolas ___ Chicken-users mailing list Chicken-users@nongnu.org http://lists.nongnu.org/mailman/listinfo/chicken-users
Re: [Chicken-users] current-time on 32-bit hardware
Hi, On Fri, Jul 30, 2010 at 9:13 PM, Felix wrote: > I propose to use flonums for timeout values. This makes the > representation of srfi-18 "time" values simpler and removes any > possibility of overflow. I don't think the performance impact is all > that heavy. Okay, thank you. One thing that still bothers me is the use of gettimeofday inside the scheduler. I'm not sure everything will work nicely if an NTP server (or root) sets the date to something in the past. And then comes the problem of having a _portable_ way to represent monotonic time... > If you are adventurous, you can try out the "flonum-milliseconds" > branch in the git repository, where I made all the necessary changes > (quite a lot, in fact). Feedback would be great, since I don't have > decent testing code for multithreading. Thank you, I'll try it. > Something will break, that's for sure, but I see no way around it. Well, it's an experimental branch, after all ;-) -- Nicolas ___ Chicken-users mailing list Chicken-users@nongnu.org http://lists.nongnu.org/mailman/listinfo/chicken-users
Re: [Chicken-users] Disable garbage collection
On Fri, Aug 6, 2010 at 12:54 AM, John Cowan wrote: > I suppose you could have a startup option which disables major GCs and > allocates one big space, and then kills the program while it runs out. You can compile with -heap-size XXX, which will produce an executable using a fixed amount of heap and die if it runs out of space. Running out of heap triggers a panic in the chicken library, so you cannot catch it as an error condition and try to act on it (and there would be no guaranties anyway as to what you would still be able to do if you could anyway). > But perhaps the question is aimed at disabling GC in a given dynamic > scope, so as to be sure that pointers retained internally by C code > still work. This would have to be preceded by a minor GC, of course. The foreign function interface allows you to define new "GC roots" to avoid having data shared with foreign code from being garbage collected. Regards, -- Nicolas ___ Chicken-users mailing list Chicken-users@nongnu.org http://lists.nongnu.org/mailman/listinfo/chicken-users
Re: [Chicken-users] current-time on 32-bit hardware
Hello, On Fri, Jul 30, 2010 at 21:13, Felix wrote: > > If you are adventurous, you can try out the "flonum-milliseconds" > branch in the git repository, where I made all the necessary changes > (quite a lot, in fact). Feedback would be great, since I don't have > decent testing code for multithreading. It's been quite a while since this message... I have backported the flonum-milliseconds code for my 4.3.0 installation and used it since the beginning of August. I also added a patch to runtime.c to use times() to compute dates instead of gettimeofday(). The two multi-threaded applications I have that use Chicken include each a handful of threads, finite state automatons, timers, and mutexes. They spawn several other processes, talk to them through sockets and pipes, parse their output, filter/modify/group log messages and events (maximum 1 event every 2 ms), throw and catch some exceptions and also use dynamic-wind and call/cc. While 1 event per 2 ms max is not exactly blindingly fast, these applications have passed soak tests for a hundred hours each, and are deployed at several customers' sites since the beginning of September, with nobody complaining so far. So I vote for the inclusion of the flonum-milliseconds patch :-) Best regards, -- Nicolas ___ Chicken-users mailing list Chicken-users@nongnu.org http://lists.nongnu.org/mailman/listinfo/chicken-users
Re: [Chicken-users] Chicken segfaults with large-ish inputs
Hello, On Sun, Feb 20, 2011 at 06:47, Sam Hardwick wrote: > > (define (sum term a next b) > (if (> a b) > 0 > (+ (term a) > (sum term (next a) next b You can use the following trick to accumulate intermediate results and thus turn the call to sum into a tail recursive one: (define (sum term a next b) (letrec ((helper (lambda (acc t a n b) (if (> a b) acc (helper (+ acc (t a)) t (n a) n b) (helper 0 term a next b))) With chicken 4.6.0, I get the following: #;14> (integral cube 0 1 10) 0.25 #;15> (integral cube 0 1 100) 0.25 #;16> (integral cube 0 1 1000) 0.25 #;17> (integral cube 0 1 1) 0.25 #;18> (integral cube 0 1 10) 0.249 #;19> (integral cube 0 1 100) ; Used to crash from that point on 0.25 #;20> (integral cube 0 1 1000) 0.25 Hope this helps, -- Nicolas ___ Chicken-users mailing list Chicken-users@nongnu.org http://lists.nongnu.org/mailman/listinfo/chicken-users
[Chicken-users] raw packet interface
Hello Chickenistas, As part of testing a network appliance (router/firewall etc...), I'd like to be able to read and write arbitrary data to the network. So I'm wondering if somebody has already some tools to interface to low-level networking services, such as BPF, libpcap... I am trying to find error cases in the handling of incoming packets in the appliance; I do not need throughput performance nor very precise timings. I am running under FreeBSD 8.1. I'd be grateful for any advice. Thanks in advance, -- Nicolas ___ Chicken-users mailing list Chicken-users@nongnu.org http://lists.nongnu.org/mailman/listinfo/chicken-users
Re: [Chicken-users] raw packet interface
Hello, On Thu, Mar 10, 2011 at 13:52, Stephen Eilert wrote: > > Do you think that bindings for libpcap would be enough for your purposes? I'll need filtering capabilities like those of libpcap (or BPF). However, libpcap does not seem (to my knowledge) to be able to send packets. Since I intend to play tricks with the link layer, I think I'll need to use BPF. Every OS seems to have its own prefered way of filtering and sending raw frames, so maybe there's not much hope for portability. (I do not need portability; but if I can have it for a moderate price, why not do it?) Regards, -- Nicolas ___ Chicken-users mailing list Chicken-users@nongnu.org http://lists.nongnu.org/mailman/listinfo/chicken-users
Re: [Chicken-users] raw packet interface
Hello, On Thu, Mar 10, 2011 at 23:09, Christiano F. Haesbaert wrote: > > Using raw socket is quite portable, you'll probably need something > like filtering with pcap, and then using the raw socket to send your > stuff. For anything at or above the network layer, this seems to be a good solution, thank you. For the link layer, I'll just use BPF ;-) Best regards, -- Nicolas ___ Chicken-users mailing list Chicken-users@nongnu.org http://lists.nongnu.org/mailman/listinfo/chicken-users
[Chicken-users] [4.6.0] thread-sleep! sleeps too much
Hello, I've run into a case where a thread that uses thread-sleep! for a fixed amount of time seems to never wake up. I can reproduce this from csi as well: CHICKEN (c)2008-2010 The Chicken Team (c)2000-2007 Felix L. Winkelmann Version 4.6.0 linux-unix-gnu-x86-64 [ 64bit manyargs dload ptables ] compiled 2011-01-16 on gladstone.duckburg.org (Linux) #;1> (require-extension srfi-18) ; loading library srfi-18 ... #;2> (thread-sleep! 10) #;3> (thread-sleep! (seconds->time (+ 10 (time->seconds (current-time) ^C The last call to thread-sleep! does not return after 10 seconds, nor 20 seconds... Has someone already bumped into this? Regards, -- Nicolas ___ Chicken-users mailing list Chicken-users@nongnu.org http://lists.nongnu.org/mailman/listinfo/chicken-users
Re: [Chicken-users] [4.6.0] thread-sleep! sleeps too much
>On Mon, Mar 28, 2011 at 22:25, David N Murray wrote: > > Tests OK in 4.6.5. (Sorry, don't have 4.6.0 installed anymore.) On Tue, Mar 29, 2011 at 03:19, Felix wrote: > > Can you try a newer chicken version? I can't reproduce this right now. Thanks to both of you. As pointed out, this problem does not exist in 4.6.5. Maybe I should change habits and follow the dev-snapshots instead of the stable releases. Regards, -- Nicolas ___ Chicken-users mailing list Chicken-users@nongnu.org http://lists.nongnu.org/mailman/listinfo/chicken-users
[Chicken-users] [1.89] The symbol .
Hello, I would like to represent "the symbol .". This works fine: #;1> (list 'a (string->symbol ".") 'b) (a |.| b) But this does not: #;2> (list 'a '|.| 'b) Error: invalid use of '.' #;2> b #;3> (a) I expected the same behaviour as with "the symbol )": #;4> (list 'a (string->symbol ")") 'b) (a |\)| b) #;5> (list 'a '|\)| 'b) (a |\)| b) Is there a way to input the dot as a symbol literal ? -- Nicolas ___ Chicken-users mailing list Chicken-users@nongnu.org http://lists.nongnu.org/mailman/listinfo/chicken-users
Re: [Chicken-users] Compilers vs. interpreters
Ed Watkeys <[EMAIL PROTECTED]> writes: > All this talk of Chicken's differing behaviors when interpeting vs. > compiling code has gotten me thinking. Who here uses compiled code > and who here simply uses the interpreter? My work follows a rough > 90/10 split: I never bother compiling the vast majority of the code I > execute with Chicken. For me, it is the converse: I use the interpreter for small experiments, but I always end up compiling my code. This is because I need to embed Chicken inside C code, and I am really happy with how easily this can be achieved with Chicken. -- Nicolas Don't hit the keys so hard, it hurts. ___ Chicken-users mailing list Chicken-users@nongnu.org http://lists.nongnu.org/mailman/listinfo/chicken-users