2017-08-24 4 views
2

Voici mon code système:comment utiliser le numéro dans le paramètre de script système POULET

(define (fact n) 
    (if (= n 1) 
     1 
     (* n (fact (- n 1))))) 
(define (main args) 
    (fact (car args))) 

Puis-je exécuter ce code comme un script avec cette commande en bash:

csi -ss test.scm 4

Cependant, l'interprète reçoit ce message d'erreur:

Error: (=) bad argument type: "4" 

Call history: 

<syntax>  (##core#lambda (n) (define (iter num result) (if (> num n) result (iter (+ num 1) (* result num)))) ... 
<syntax>  [fact2] (##core#let ((iter (##core#undefined))) (##core#set! iter (##core#lambda (num result) (if (> num n) ... 
<syntax>  [fact2] (##core#begin (##core#set! iter (##core#lambda (num result) (if (> num n) result (iter (+ num 1) (* ... 
<syntax>  [fact2] (##core#set! iter (##core#lambda (num result) (if (> num n) result (iter (+ num 1) (* result num))))... 
<syntax>  [fact2] (##core#lambda (num result) (if (> num n) result (iter (+ num 1) (* result num)))) 
<syntax>  [iter] (##core#begin (##core#if (> num n) result (iter (+ num 1) (* result num)))) 
<syntax>  [iter] (##core#if (> num n) result (iter (+ num 1) (* result num))) 
<syntax>  [iter] (> num n) 
<syntax>  [iter] (iter (+ num 1) (* result num)) 
<syntax>  [iter] (+ num 1) 
<syntax>  [iter] (* result num) 
<syntax>  [fact2] (iter 1 1) 
<syntax>  [fact2] (##core#undefined) 
<eval> [main] (fact (car args)) 
<eval> [main] (car args) 
<eval> [fact] (= n 1) <-- 

Je suppose que l'interpréteur prend L'argument 4 comme une chaîne, alors comment utiliser le numéro dans le paramètre de script de schéma CHICKEN?

Répondre

2

Essayez string->number, ce qui est une procédure standard r5rs:

(define (main args) 
    (fact (string->number (car args))))