nendo 0.3.3 → 0.3.4

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
data/bin/nendo CHANGED
@@ -131,12 +131,12 @@ def main
131
131
  # compile script file.
132
132
  core.clean_compiled_code( )
133
133
  core.load( fn )
134
- core.replStr( sprintf( '(print-compiled-code "%s")', fn ))
134
+ core.evalStr( sprintf( '(print-compiled-code "%s")', fn ))
135
135
  else
136
136
  # start script file.
137
137
  core.setArgv( userOptions[1..userOptions.length] )
138
138
  core.load( fn )
139
- core.replStr( "(if (and (global-defined? 'main) (procedure? main)) (main *argv*) #f)" )
139
+ core.evalStr( "(if (and (global-defined? 'main) (procedure? main)) (main *argv*) #f)" )
140
140
  end
141
141
  else
142
142
  core.repl
data/emacs/nendo-mode.el CHANGED
@@ -3,6 +3,33 @@
3
3
  ;;
4
4
  ;; Copyright (c) 2010 Kiyoka Nishiyama
5
5
  ;;
6
+ ;; Redistribution and use in source and binary forms, with or without
7
+ ;; modification, are permitted provided that the following conditions
8
+ ;; are met:
9
+ ;;
10
+ ;; 1. Redistributions of source code must retain the above copyright
11
+ ;; notice, this list of conditions and the following disclaimer.
12
+ ;;
13
+ ;; 2. Redistributions in binary form must reproduce the above copyright
14
+ ;; notice, this list of conditions and the following disclaimer in the
15
+ ;; documentation and/or other materials provided with the distribution.
16
+ ;;
17
+ ;; 3. Neither the name of the authors nor the names of its contributors
18
+ ;; may be used to endorse or promote products derived from this
19
+ ;; software without specific prior written permission.
20
+ ;;
21
+ ;; THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
22
+ ;; "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
23
+ ;; LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
24
+ ;; A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
25
+ ;; OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
26
+ ;; SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED
27
+ ;; TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
28
+ ;; PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
29
+ ;; LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
30
+ ;; NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
31
+ ;; SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
32
+ ;;
6
33
  ;;
7
34
  ;; Please add follows to .emacs
8
35
  ;; (setq scheme-program-name "nendo")
@@ -82,6 +109,105 @@ Editing commands are similar to those of 'scheme-mode'."
82
109
  match init))))
83
110
 
84
111
 
112
+ ;;
113
+ ;; Indent width settings
114
+ ;; port from gauche-mode.el by OOHASHI Daichi <leque@katch.ne.jp>
115
+ ;;
116
+ (mapc #'(lambda (s)
117
+ (put (car s) 'scheme-indent-function (cdr s)))
118
+ '(
119
+ (&block . 1)
120
+ (and-let* . 1)
121
+ (begin0 . 0)
122
+ (call-with-builder . 1)
123
+ (call-with-cgi-script . 1)
124
+ (call-with-client-socket . 1)
125
+ (call-with-ftp-connection . 1)
126
+ (call-with-input-conversion . 1)
127
+ (call-with-input-file . 1)
128
+ (call-with-input-process . 1)
129
+ (call-with-input-string . 1)
130
+ (call-with-iterator . 1)
131
+ (call-with-iterators . 1)
132
+ (call-with-output-conversion . 1)
133
+ (call-with-output-file . 1)
134
+ (call-with-output-process . 1)
135
+ (call-with-output-string . 0)
136
+ (call-with-process-io . 1)
137
+ (call-with-string-io . 1)
138
+ (call-with-temporary-file . 1)
139
+ (call-with-values . 1)
140
+ (dolist . 1)
141
+ (dotimes . 1)
142
+ (guard . 1)
143
+ (hash-table-for-each . 1)
144
+ (if-let1 . 2)
145
+ (if-match . 2)
146
+ (let*-values . 1)
147
+ (let-args . 2)
148
+ (let-keywords . 2)
149
+ (let-keywords* . 2)
150
+ (let-match . 2)
151
+ (let-optionals* . 2)
152
+ (let-values . 1)
153
+ (let1 . 2)
154
+ (let/cc . 1)
155
+ (make . 1)
156
+ (make-parameter . 1)
157
+ (match . 1)
158
+ (parameterize . 1)
159
+ (parse-options . 1)
160
+ (pre-pose-order . 1)
161
+ (rlet1 . 2)
162
+ (receive . 2)
163
+ (rxmatch-case . 1)
164
+ (rxmatch-cond . 0)
165
+ (rxmatch-if . 4)
166
+ (rxmatch-let . 2)
167
+ (syntax-rules . 1)
168
+ (unless . 1)
169
+ (until . 1)
170
+ (unwind-protect . 1)
171
+ (when . 1)
172
+ (while . 1)
173
+ (with-builder . 1)
174
+ (with-error-handler . 1)
175
+ (with-exception-handler . 1)
176
+ (with-error-to-port . 1)
177
+ (with-input-conversion . 1)
178
+ (with-input-from-port . 1)
179
+ (with-input-from-file . 1)
180
+ (with-input-from-process . 1)
181
+ (with-input-from-string . 1)
182
+ (with-iterator . 1)
183
+ (with-locking-mutex . 1)
184
+ (with-module . 1)
185
+ (with-output-conversion . 1)
186
+ (with-output-to-file . 1)
187
+ (with-output-to-port . 1)
188
+ (with-output-to-process . 1)
189
+ (with-port-locking . 1)
190
+ (with-ports . 3)
191
+ (with-signal-handlers . 1)
192
+ (with-string-io . 1)
193
+ (with-time-counter . 1)
194
+ ;; R6RS
195
+ (call-with-bytevector-output-port . 0)
196
+ (call-with-current-continuation . 0)
197
+ (call-with-port . 1)
198
+ (call-with-string-output-port . 0)
199
+ (call/cc . 0)
200
+ (datum->syntax . 1)
201
+ (define-condition-type . 2)
202
+ (define-enumeration . 1)
203
+ (define-record-type . 1)
204
+ (dynamic-wind . 0)
205
+ (identifier-syntax . 0)
206
+ (library . 1)
207
+ (letrec* . 1)
208
+ (with-syntax . 1)
209
+ ))
210
+
85
211
 
86
212
  (provide 'nendo-mode)
87
213
 
@@ -0,0 +1,20 @@
1
+ #!/usr/local/bin/ruby
2
+ # -*- coding: utf-8 -*-
3
+
4
+ require 'kyotocabinet'
5
+ include KyotoCabinet
6
+
7
+ db = DB::new
8
+
9
+ # データベースを開く
10
+ unless db.open('numbers.kch', DB::OWRITER | DB::OCREATE)
11
+ printf("open error: %s\n", db.error)
12
+ end
13
+
14
+ # 書きこみ
15
+ (0..99999).each { |num|
16
+ db[ num ] = num
17
+ }
18
+
19
+ p db[1000]
20
+ p db[10000]
@@ -0,0 +1,29 @@
1
+ #!/bin/sh
2
+ :; #-*- mode: nendo; syntax: scheme -*-;;
3
+ :; exec /usr/local/bin/nendo $0 $*
4
+
5
+ (require "kyotocabinet")
6
+
7
+ (define db (KyotoCabinet::DB.new))
8
+
9
+ (define (main argv)
10
+ (define (_create)
11
+ (if (not (db.open "numbers.kch" (+ KyotoCabinet::DB::OWRITER KyotoCabinet::DB::OCREATE)))
12
+ (printf "open error: %s\n" db.error)
13
+ ;; 書きこみ
14
+ (let loop ((num 0))
15
+ (when (< num 100000)
16
+ (hash-table-put! db num num)
17
+ (loop (+ num 1))))))
18
+ (_create)
19
+ (print (hash-table-get db 1000))
20
+ (print (hash-table-get db 10000)))
21
+
22
+
23
+
24
+
25
+
26
+
27
+
28
+
29
+
@@ -0,0 +1,30 @@
1
+ #!/bin/sh
2
+ :; #-*- mode: nendo; syntax: scheme -*-;;
3
+ :; exec /usr/local/bin/nendo $0 $*
4
+
5
+ (require "kyotocabinet")
6
+
7
+ (define db (KyotoCabinet::DB.new))
8
+
9
+ (define (main argv)
10
+ (define (_create)
11
+ (if (not (db.open "numbers.kch" (+ KyotoCabinet::DB::OWRITER KyotoCabinet::DB::OCREATE)))
12
+ (printf "open error: %s\n" db.error)
13
+ ;; 書きこみ
14
+ (Range.new 0 99999
15
+ (&block (num)
16
+ (db.store num num)))))
17
+ (_create)
18
+ (print (hash-table-get db 1000))
19
+ (print (hash-table-get db 10000)))
20
+
21
+
22
+
23
+
24
+
25
+
26
+
27
+
28
+
29
+
30
+
@@ -0,0 +1,31 @@
1
+ #!/bin/sh
2
+ :; #-*- mode: nendo; syntax: scheme -*-;;
3
+ :; exec /usr/local/bin/nendo $0 $*
4
+
5
+ (require "kyotocabinet")
6
+
7
+ (define db (KyotoCabinet::DB.new))
8
+
9
+ (define (main argv)
10
+ (define (_create)
11
+ (if (not (db.open "numbers.kch" (+ KyotoCabinet::DB::OWRITER KyotoCabinet::DB::OCREATE)))
12
+ (printf "open error: %s\n" db.error)
13
+ ;; 書きこみ
14
+ (for-each
15
+ (lambda (num)
16
+ (db.store num num))
17
+ (range 100000))))
18
+
19
+ (_create)
20
+ (print (hash-table-get db 1000))
21
+ (print (hash-table-get db 10000)))
22
+
23
+
24
+
25
+
26
+
27
+
28
+
29
+
30
+
31
+
@@ -0,0 +1,20 @@
1
+ #!/usr/local/bin/ruby
2
+
3
+ require 'nendo'
4
+
5
+ def main
6
+ core = Nendo::Core.new()
7
+ core.loadInitFile
8
+ lst = [ "a", "b", "c",
9
+ [ "d", "e" ].to_list
10
+ ].to_list
11
+ core.evalStr( '(define (sexpToString sexp) (write-to-string sexp))' )
12
+ core.evalStr( '(export-to-ruby sexpToString)' )
13
+ core.evalStr( '(use text.tree)' )
14
+ core.evalStr( '(define (treeToString sexp) (tree->string sexp))' )
15
+ core.evalStr( '(export-to-ruby treeToString)' )
16
+ puts core.sexpToString( lst )
17
+ puts core.treeToString( lst )
18
+ end
19
+
20
+ main
data/example/scratch.nnd CHANGED
@@ -2,23 +2,14 @@
2
2
  ;; -----------------
3
3
  (enable-idebug)
4
4
  (disable-idebug)
5
- (define debug-print-length 256)
6
-
7
- ;; Bug : got in `translate': undefined method `sourcefile' for #<Nendo::Cell:0x00000101580668> (NoMethodError)
8
- (let-values (((a b) (car+cdr '(1 . 2))))
9
- (or (and (= a 1) (= b 2))
10
- (fail 'car+cdr:1)))
11
-
12
- (define (foo lis)
13
- (second lis))
5
+ (define debug-print-length 2000)
6
+
7
+ (%internal-define-to-letrec
8
+ '(macro (x)
9
+ (define (foo v) (+ v 1))
10
+ (define result 10)
11
+ (define (bar v) (+ v 2))
12
+ '(1 2 3)))
14
13
 
15
- (foo '(1 2 3))
16
- (foo 1)
17
-
18
- '(1 2 3)
19
14
  (exit)
20
15
 
21
- ;; circular
22
- (load-library "srfi-1")
23
- (list?
24
- (circular-list 1 2))
@@ -0,0 +1,14 @@
1
+ #!/usr/local/bin/ruby
2
+
3
+ # takeuchi function ( tarai mawashi bench )
4
+ def tak( x, y, z )
5
+ if y >= x
6
+ y
7
+ else
8
+ tak( tak( x-1, y, z ),
9
+ tak( y-1, z, x ),
10
+ tak( z-1, x, y ))
11
+ end
12
+ end
13
+
14
+ puts tak( 10, 5, 0 )
@@ -19,7 +19,7 @@ trampCall(
19
19
 
20
20
  trampCall(
21
21
  begin
22
- def self._debug_MIMARKprint_MIMARKoutput_MIMARKfunc_METHOD( origname, pred, args ) callProcedure( origname, pred, args ) end
22
+ def self._debug_MIMARKprint_MIMARKoutput_MIMARKfunc_METHOD( origname, pred, args ) lispMethodEntry( origname, true ) ; ret = callProcedure( origname, pred, args ) ; lispMethodExit( origname, true ) ; return ret end
23
23
  @global_lisp_binding['_debug_MIMARKprint_MIMARKoutput_MIMARKfunc'] = self.method( :_debug_MIMARKprint_MIMARKoutput_MIMARKfunc_METHOD )
24
24
  @_debug_MIMARKprint_MIMARKoutput_MIMARKfunc =
25
25
  trampCall(