【问题标题】:How to define string-right in scheme?如何在方案中定义字符串权限?
【发布时间】:2012-09-07 03:00:24
【问题描述】:

我需要定义'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))))

不适用于偶数字符串长度。请帮忙。沮丧的。

【问题讨论】:

  • 您希望得到什么回报:(string-right "foo bar baz")?

标签: scheme procedure


【解决方案1】:

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

(string-length x)

与:

(+ 1 (string-length x))

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

否则 地板((长度 + 1) / 2) = (长度 + 1) / 2

+ 1 部分将排除中间元素

完整的解决方案:

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

【讨论】:

  • REPL 在使用地板和天花板时都返回了错误。还有其他想法吗?
  • 我的回答中的floor 部分只是一个解释,而不是代码的一部分。
【解决方案2】:

试试这个方法:

(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"

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-05-07
    • 1970-01-01
    • 2019-12-05
    • 2015-06-28
    • 2013-10-03
    • 1970-01-01
    相关资源
    最近更新 更多