我试图写一个函数,它得到一个整数,用字符串表示,并检查他的所有字符是否都是数字,并相应地返回#t
\ #f
。多数民众赞成代码 -计划 - 做迭代 - 返回值
(define (splitString str) (list->vector (string->list str)))
(define myVector 0)
(define flag #t)
(define (checkIfStringLegal str) (
(set! myVector (splitString str))
(do ( (i 0 (+ i 1)) ) ; init
((= i (vector-length myVector)) flag) ; stop condition
(cond ((>= 48 (char->integer (vector-ref myVector i))) (set! flag #f))
((<= 57 (char->integer (vector-ref myVector i)))(set! flag #f))
)
)
)
)
一些解释 -
(list->vector (string->list str))
- 字符串转换炭列表。
(vector-ref myVector i)
- 来自myVector
的字符在i
的地方。
其运行正常,但是当我尝试使用本功能,像(checkIfStringLegal "444")
我得到 -
application: not a procedure;
expected a procedure that can be applied to arguments
given: #<void>
arguments...:
#t
这将工作在整数,但我也有其他要求检查这个数字。那么我怎样才能用我自己的代码解决它? – URL87
@ URL87拥抱函数式编程! “在罗马的时候...”。只需调整谓词,直到满足您的要求。例如,如果你必须测试它是一个数字还是一个小数点,可以用这个代替'char-numeric?':'(lambda(c)(或者(char-numeric?c)(char =?c# \')))' –
我试着用'(checkIfStringLegal“444”)来提示你的第一个建议,但是它提示'andmap:undefined; 不能引用未定义的标识符' – URL87