基本上,我有一个问题,这是解决问题所需的信息。
元音(“a”、“e”、“i”、“o”和“u”)与辅音(任何不是元音的字母)是分开处理的。为了简单起见,我们认为“y”永远是辅音。尽管存在各种形式的猪拉丁语,但我们将使用以下规则:
(1)两个字母或少于两个字母的字在结尾加上“way”。所以“a”变成了“离开”。
(2)在任何以辅音开头的单词中,辅音被移至末尾,并添加“ay”。如果一个单词以两个以上的辅音开头,则只移动两个字母的fi。因此,“hello”变成“ellohay”,而“string”变成“循环”。
(3)任何以元音开头的词,在结尾只加上“way”。所以“解释”变成了“解释方式”。
编写一个函数(Pig-拉丁文L),它消耗一个非空的(listof ),并返回一个Str,其中包含L转换成Pig拉丁语的单词。L中的每个值应该只包含小写字母,并且长度至少为1。
我知道我需要在这里设置三个主要的条件,我正在努力学习如何使用正确的语法来写出我的解决方案。首先,我需要创建一个条件,查看字符串的长度是否小于2,以满足(1)条件。对于(2)我需要查看字符串中的前两个字符,我假设必须将字符串转换为char列表( string -> list )。对于(3),我知道我只需要查看字符串中的第一个字符,基本上我必须重复我对(2)所做的操作,但只需要查看第一个字符。
不过,我不知道该如何操纵一张查尔的名单。我也不知道如何确保字符串长度符合标准。如能提供任何协助,将不胜感激。基本上,我几乎没有任何代码来解决我的问题,因为我对在这里做什么感到困惑。
这个问题的一个例子是
(pig-latin (list "this" "is" "a" "crazy" "exercise")) =>
"isthay isway away azycray exerciseway"发布于 2019-06-05 08:43:52
解决这一问题的最佳策略是:
确定写入条件的最佳顺序也很重要,例如:条件1和条件3可以在单个情况下合并。这是我的建议:
(define (vowel-at-index? text index)
(member (string-ref text index)
'(#\a #\e #\i #\o #\u)))
(define (pigify text)
; cases 1 and 3
(cond ((or (<= (string-length text) 2)
(vowel-at-index? text 0))
(string-append text "way"))
; case 2.1
((and (not (vowel-at-index? text 0))
(vowel-at-index? text 1))
(string-append (substring text 1)
(substring text 0 1)
"ay"))
; case 2.2
(else
(string-append (substring text 2)
(substring text 0 2)
"ay"))))
(define (pig-latin lst)
(string-join (map pigify lst)))对于最后一步,我们只需要将pigify过程应用于输入中的每个元素,这就是map所做的。它如预期的那样运作:
(pig-latin '("this" "is" "a" "crazy" "exercise"))
=> "isthay isway away azycray exerciseway"https://stackoverflow.com/questions/56454196
复制相似问题