如何在方案中定义字符串权限?

时间:2012-09-13 23:19:28

标签: scheme procedure

我需要定义'string-right' 程序

(define string-right
  (lambda (x)
    (substring x (quotient (string-length x) 2) (string-length x))))

对奇数字符串长度不起作用 但程序

(define string-right
    (lambda (x)
      (substring x (+ (quotient (string-length x) 2) 1)(string-length x))))

对偶数字符串长度不起作用。请帮忙。沮丧。

2 个答案:

答案 0 :(得分:1)

假设你的意思是你想要一个没有中间字符串的正确的一半字符串:
在商(第一个选项)中,替换:

(string-length x)

使用:

(+ 1 (string-length x))

如果字符串的长度是偶数,那么 floor((length + 1)/ 2)= length / 2

,否则 floor((length + 1)/ 2)=(length + 1)/ 2

+ 1部分将排除中间元素

完整的解决方案:

(define string-right
  (lambda (x)
    (substring x (quotient (+ 1 (string-length x)) 2) (string-length x))))

答案 1 :(得分:0)

尝试这种方法:

(define string-right
  (lambda (x)
    (substring x (floor (/ (string-length x) 2)))))

如果字符串长度为奇数,则上述过程将包括中间的字符。如果您不想这样,请将floor替换为ceiling,并且返回的字符串中不会出现中间字符。

使用floor的一些示例:

(string-right "")      ; => ""
(string-right "a")     ; => "a"
(string-right "ab")    ; => "b"
(string-right "abc")   ; => "bc"
(string-right "abcd")  ; => "cd"
(string-right "abcde") ; => "cde"

使用ceiling的一些示例:

(string-right "")      ; => ""
(string-right "a")     ; => ""
(string-right "ab")    ; => "b"
(string-right "abc")   ; => "c"
(string-right "abcd")  ; => "cd"
(string-right "abcde") ; => "de"