你好,我是一名学生,目前正在尝试在Dr型球拍中发挥作用,目的是 选择字母后,将其变成下划线
字符串(单词)字符串(字母)->字符串(答案/下划线)
我只能用一个字母_来实现这一点,这使得第二个检查为真,我不知道如何写多个字母
(check-expect(underscore "william""li")"_illi__"))
(check-expect(underscore "william" "l")"__ll___))
我的代码:
(define (anti-omit word letter)
(cond[(string=? word letter)letter]
[(= 1 (string-length word))"_"]
[else
(string-append
(anti-omit (substring word 0 1)letter)
(anti-omit (substring word 1)letter))]))
答案 0 :(得分:1)
这是一个存有目的声明,签名和您的测试的存根:
base64_encode()
由于您使用的是学生用语言,并且如您在问题标题中所建议的那样,您想对数据进行重现...您将需要递归数据定义:
;; String String -> String
;; keeps all letters that occur in l, replaces with "_" otherwise
(check-expect (anti-omit "william" "li") "_illi__")
(check-expect (anti-omit "william" "l") "__ll___")
(define (anti-omit w l)
"")
完成此函数的定义:
;; String is one of:
;; - ""
;; - (string-append 1String String)
对其他两个功能(与列表的其余部分和第一个相对应)的数据限制更严格:
;; String -> String
;; is str equal to "" ?
(define (string-empty? str)
...)
您需要完成的其他一些功能:
;; NEString is one of:
;; - (string-append 1String "")
;; - (string-append 1String NEString)
现在,您可以在字符串上创建类似的函数了:
;; NEString -> String
;; remove the first 1String from str
(define (string-rest str)
...)
;; NEString -> String
;; the first 1String form str
(define (string-first str)
...)
类似地,完成以下定义:
;; [1String -> 1String] String -> String
;; Applies the function f on each 1String in s
(define (map-str f s)
(cond [(string-empty? s) ""]
[else (string-append (f (string-first s)) (map-str f (string-rest s)))]))
我们的“愿望清单”已经完成,我们可以组成助手来完成最终功能:
;; 1String String -> Boolean
;; is does 1String occur in String?
(define (member-str e l)
...)
使用爆炸和内爆的类似版本,不需要我们定义的任何功能(将此用作参考实现):
(define (anti-omit w l)
(map-str (λ (x) (if (member-str x l) x "_")) w))