nendo 0.3.4 → 0.3.5
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/benchmark/benchmark.nnd +57 -0
- data/{example/tak.nnd → benchmark/nendo_benchmark_code.nnd} +6 -2
- data/benchmark/ruby_benchmark_code.rb +58 -0
- data/example/scratch.nnd +52 -6
- data/lib/debug/syslog.nndc +8 -6
- data/lib/init.nnd +14 -14
- data/lib/init.nndc +4142 -2932
- data/lib/nendo/test.nndc +308 -227
- data/lib/nendo.rb +41 -34
- data/lib/srfi-1.nndc +3572 -2599
- data/lib/text/html-lite.nndc +621 -440
- data/lib/text/tree.nndc +38 -27
- data/test/nendo_spec.rb +179 -149
- data/test/nendo_util.nnd +4 -3
- metadata +20 -7
- data/example/tak_ruby_version.rb +0 -14
@@ -0,0 +1,57 @@
|
|
1
|
+
#!/bin/sh
|
2
|
+
:; #-*- mode: nendo; syntax: scheme -*-;;
|
3
|
+
:; exec /usr/local/bin/nendo $0 $*
|
4
|
+
|
5
|
+
(require "benchmark")
|
6
|
+
(.load "./benchmark/ruby_benchmark_code.rb")
|
7
|
+
( load "./benchmark/nendo_benchmark_code.nnd")
|
8
|
+
|
9
|
+
(require "ruby-prof")
|
10
|
+
|
11
|
+
;; ------------------ macro --------------------
|
12
|
+
(define bench-task
|
13
|
+
(macro (profile-flag title proc)
|
14
|
+
`(begin
|
15
|
+
(.puts ,title)
|
16
|
+
(.puts Benchmark::CAPTION)
|
17
|
+
,(if profile-flag
|
18
|
+
`(let* ((result (RubyProf.profile
|
19
|
+
(&block ()
|
20
|
+
,proc)))
|
21
|
+
(printer (RubyProf::GraphPrinter.new result)))
|
22
|
+
(printer.print STDOUT))
|
23
|
+
`(.puts (Benchmark.measure
|
24
|
+
(&block ()
|
25
|
+
,proc))))
|
26
|
+
(.puts ""))))
|
27
|
+
|
28
|
+
|
29
|
+
;; -------------------- fact --------------------
|
30
|
+
(bench-task #f
|
31
|
+
"fact (ruby version)"
|
32
|
+
(printf " => %d\n" (RubyBenchmarkCode.new.fact 1000)))
|
33
|
+
|
34
|
+
(bench-task #f
|
35
|
+
"fact (nendo version)"
|
36
|
+
(printf " => %d\n" (fact 1000)))
|
37
|
+
|
38
|
+
|
39
|
+
;; -------------------- tak --------------------
|
40
|
+
(bench-task #f
|
41
|
+
"tak (ruby version)"
|
42
|
+
(printf " => %d\n" (RubyBenchmarkCode.new.tak 10 5 0)))
|
43
|
+
|
44
|
+
(bench-task #f
|
45
|
+
"tak2 (ruby version)"
|
46
|
+
(printf " => %d\n" (RubyBenchmarkCode.new.tak2 10 5 0)))
|
47
|
+
|
48
|
+
(bench-task #f
|
49
|
+
"tak3 (ruby version)"
|
50
|
+
(printf " => %d\n" (RubyBenchmarkCode.new.tak3 10 5 0)))
|
51
|
+
|
52
|
+
(bench-task #f
|
53
|
+
"tak (nendo version)"
|
54
|
+
(printf " => %d\n" (tak 10 5 0)))
|
55
|
+
|
56
|
+
|
57
|
+
;;[EOF]
|
@@ -0,0 +1,58 @@
|
|
1
|
+
#!/usr/local/bin/ruby
|
2
|
+
|
3
|
+
# takeuchi function ( tarai mawashi bench )
|
4
|
+
class RubyBenchmarkCode
|
5
|
+
|
6
|
+
def tak( x, y, z )
|
7
|
+
if y >= x
|
8
|
+
y
|
9
|
+
else
|
10
|
+
tak( tak( x-1, y, z ),
|
11
|
+
tak( y-1, z, x ),
|
12
|
+
tak( z-1, x, y ))
|
13
|
+
end
|
14
|
+
end
|
15
|
+
|
16
|
+
def tak2( x, y, z )
|
17
|
+
@inner_tak = Proc.new { |_x,_y,_z|
|
18
|
+
if ( _y >= _x )
|
19
|
+
_y
|
20
|
+
else
|
21
|
+
@inner_tak.call(
|
22
|
+
@inner_tak.call( _x-1, _y, _z ),
|
23
|
+
@inner_tak.call( _y-1, _z, _x ),
|
24
|
+
@inner_tak.call( _z-1, _x, _y ))
|
25
|
+
end
|
26
|
+
}
|
27
|
+
@inner_tak.call( x, y, z )
|
28
|
+
end
|
29
|
+
|
30
|
+
def tak3( x, y, z )
|
31
|
+
@inner_minus = Proc.new { |_a,_b|
|
32
|
+
_a - _b
|
33
|
+
}
|
34
|
+
@inner_le = Proc.new { |_a,_b|
|
35
|
+
_a >= _b
|
36
|
+
}
|
37
|
+
@inner_tak = Proc.new { |_x,_y,_z|
|
38
|
+
if ( @inner_le.call( _y, _x ))
|
39
|
+
_y
|
40
|
+
else
|
41
|
+
@inner_tak.call(
|
42
|
+
@inner_tak.call( @inner_minus.call(_x,1), _y, _z ),
|
43
|
+
@inner_tak.call( @inner_minus.call(_y,1), _z, _x ),
|
44
|
+
@inner_tak.call( @inner_minus.call(_z,1), _x, _y ))
|
45
|
+
end
|
46
|
+
}
|
47
|
+
@inner_tak.call( x, y, z )
|
48
|
+
end
|
49
|
+
|
50
|
+
def fact( n )
|
51
|
+
if 0 == n
|
52
|
+
1
|
53
|
+
else
|
54
|
+
n * fact( n - 1 )
|
55
|
+
end
|
56
|
+
end
|
57
|
+
|
58
|
+
end
|
data/example/scratch.nnd
CHANGED
@@ -4,12 +4,58 @@
|
|
4
4
|
(disable-idebug)
|
5
5
|
(define debug-print-length 2000)
|
6
6
|
|
7
|
-
|
8
|
-
|
9
|
-
|
10
|
-
|
11
|
-
|
12
|
-
|
7
|
+
|
8
|
+
|
9
|
+
|
10
|
+
(define case
|
11
|
+
(macro (cond-exp . body)
|
12
|
+
(define (case-block val . elem)
|
13
|
+
(let1 block (car elem)
|
14
|
+
(let ((cond-vals (car block))
|
15
|
+
(body (cdr block)))
|
16
|
+
(let1 v
|
17
|
+
(if (eq? 'else cond-vals)
|
18
|
+
cond-vals
|
19
|
+
(cons 'or
|
20
|
+
(map
|
21
|
+
(lambda (x)
|
22
|
+
`(eqv? (quote ,x) ,val))
|
23
|
+
cond-vals)))
|
24
|
+
`((,v
|
25
|
+
,@body))))))
|
13
26
|
|
27
|
+
(define (case-iter val lst)
|
28
|
+
(cond
|
29
|
+
((null? lst)
|
30
|
+
'())
|
31
|
+
((eq? 1 (length lst))
|
32
|
+
(case-block val (car lst)))
|
33
|
+
(else
|
34
|
+
(append (case-block val (car lst))
|
35
|
+
(case-iter val (cdr lst))))))
|
36
|
+
|
37
|
+
(let1 sym (gensym)
|
38
|
+
`(let1 ,sym ,cond-exp
|
39
|
+
(cond
|
40
|
+
,@(case-iter sym body))))))
|
41
|
+
|
42
|
+
(pretty-print
|
43
|
+
(macroexpand-1
|
44
|
+
'(case (car '(a b c d))
|
45
|
+
((a) 'a)
|
46
|
+
((b) 'b)
|
47
|
+
((1) 1)
|
48
|
+
(else 'else))))
|
49
|
+
|
50
|
+
(case (caddr '(a b 1 2))
|
51
|
+
((a) 'a)
|
52
|
+
((b) 'b)
|
53
|
+
((1) 1)
|
54
|
+
(else 'else))
|
55
|
+
|
56
|
+
|
57
|
+
|
58
|
+
|
59
|
+
|
14
60
|
(exit)
|
15
61
|
|
data/lib/debug/syslog.nndc
CHANGED
@@ -4,16 +4,17 @@
|
|
4
4
|
#
|
5
5
|
|
6
6
|
trampCall(
|
7
|
-
delayCall( 'require',
|
7
|
+
delayCall( '_require', 'require',
|
8
8
|
begin
|
9
9
|
if @global_lisp_binding.has_key?('_require') then
|
10
10
|
trampCall(@_require)
|
11
11
|
else raise NameError.new( "Error: undefined variable _require", "_require" ) end
|
12
12
|
rescue => __e ; __e.set_backtrace( ["./lib/debug/syslog.nnd:37"] + __e.backtrace ) ; raise __e
|
13
13
|
end ,
|
14
|
-
|
14
|
+
[
|
15
15
|
"syslog"
|
16
|
-
|
16
|
+
]
|
17
|
+
)
|
17
18
|
)
|
18
19
|
#--------------------
|
19
20
|
|
@@ -43,13 +44,14 @@ trampCall(
|
|
43
44
|
else raise NameError.new( "Error: undefined variable __PLMARK", "__PLMARK" ) end
|
44
45
|
rescue => __e ; __e.set_backtrace( ["./lib/debug/syslog.nnd:41"] + __e.backtrace ) ; raise __e
|
45
46
|
end ,
|
46
|
-
|
47
|
-
"Nendo: " ,
|
47
|
+
[
|
48
|
+
"Nendo: " ,
|
48
49
|
begin
|
49
50
|
trampCall(_str)
|
50
51
|
rescue => __e ; __e.set_backtrace( ["./lib/debug/syslog.nnd:41"] + __e.backtrace ) ; raise __e
|
51
52
|
end
|
52
|
-
|
53
|
+
]
|
54
|
+
))
|
53
55
|
)
|
54
56
|
rescue => __e ; __e.set_backtrace( ["./lib/debug/syslog.nnd:41"] + __e.backtrace ) ; raise __e
|
55
57
|
end
|
data/lib/init.nnd
CHANGED
@@ -652,20 +652,20 @@
|
|
652
652
|
(cons 'or
|
653
653
|
(map
|
654
654
|
(lambda (x)
|
655
|
-
`(eqv? ,x ,val))
|
655
|
+
`(eqv? (quote ,x) ,val))
|
656
656
|
cond-vals)))
|
657
657
|
`((,v
|
658
658
|
,@body))))))
|
659
659
|
|
660
660
|
(define (case-iter val lst)
|
661
661
|
(cond
|
662
|
-
((
|
662
|
+
((null? lst)
|
663
663
|
'())
|
664
664
|
((eq? 1 (length lst))
|
665
665
|
(case-block val (car lst)))
|
666
|
-
|
667
|
-
|
668
|
-
|
666
|
+
(else
|
667
|
+
(append (case-block val (car lst))
|
668
|
+
(case-iter val (cdr lst))))))
|
669
669
|
|
670
670
|
(let1 sym (gensym)
|
671
671
|
`(let1 ,sym ,cond-exp
|
@@ -1268,18 +1268,18 @@
|
|
1268
1268
|
'())
|
1269
1269
|
((list? sexp)
|
1270
1270
|
(case (car sexp)
|
1271
|
-
((
|
1271
|
+
((quote)
|
1272
1272
|
sexp)
|
1273
|
-
((
|
1273
|
+
((macro)
|
1274
1274
|
sexp)
|
1275
|
-
((
|
1275
|
+
((begin)
|
1276
1276
|
`(begin
|
1277
1277
|
,@(setup-proc-body (cdr sexp))))
|
1278
|
-
((
|
1278
|
+
((lambda)
|
1279
1279
|
`(lambda
|
1280
1280
|
,(second sexp)
|
1281
1281
|
,@(setup-proc-body (cddr sexp))))
|
1282
|
-
((
|
1282
|
+
((if)
|
1283
1283
|
(case (length sexp)
|
1284
1284
|
((3)
|
1285
1285
|
`(if
|
@@ -1290,15 +1290,15 @@
|
|
1290
1290
|
,(second sexp)
|
1291
1291
|
,(setup-proc (third sexp))
|
1292
1292
|
,(setup-proc (fourth sexp))))))
|
1293
|
-
((
|
1293
|
+
((let)
|
1294
1294
|
`(let
|
1295
1295
|
,(setup-let-args (second sexp))
|
1296
1296
|
,@(setup-proc-body (cddr sexp))))
|
1297
|
-
((
|
1297
|
+
((letrec)
|
1298
1298
|
`(letrec
|
1299
1299
|
,(setup-let-args (second sexp))
|
1300
1300
|
,@(setup-proc-body (cddr sexp))))
|
1301
|
-
((
|
1301
|
+
((define)
|
1302
1302
|
(let1 val (third sexp)
|
1303
1303
|
`(define
|
1304
1304
|
,(second sexp)
|
@@ -1325,5 +1325,5 @@
|
|
1325
1325
|
;; global variables
|
1326
1326
|
;; ----------------------------------------
|
1327
1327
|
(define *nendo-version*
|
1328
|
-
"0.3.
|
1328
|
+
"0.3.5" ;;NENDO-VERSION
|
1329
1329
|
)
|