Scheme 如何提取长度未知的字符串的最后一个字符?

Scheme 如何提取长度未知的字符串的最后一个字符?,scheme,racket,Scheme,Racket,我正在编写一个函数,将stringA和stringB作为参数,并将stringB的第一个字符与stringA的最后一个字符进行比较。如果它们相等,则函数返回true,否则返回false 我几乎已经准备好了整个函数,但是我找不到一种方法来获取stringA的最后一个字符,因为它的长度未知。我检查了文件,什么也没找到。有什么建议吗 (cond [(string=? (substring stringA ???) (substring stringB 0 2))"True"] [e

我正在编写一个函数,将stringA和stringB作为参数,并将stringB的第一个字符与stringA的最后一个字符进行比较。如果它们相等,则函数返回
true
,否则返回
false

我几乎已经准备好了整个函数,但是我找不到一种方法来获取stringA的最后一个字符,因为它的长度未知。我检查了文件,什么也没找到。有什么建议吗

  (cond
    [(string=? (substring stringA ???) (substring stringB 0 2))"True"]
    [else "False"])

每种语言都有一个字符串的长度函数。在《球拍》中,我发现:

这是:字符串长度str


因此,只需运行它,它将为您提供长度,然后您可以提取最后一个字符

每种语言都有一个字符串的长度函数。在《球拍》中,我发现:

这是:字符串长度str


因此,只需运行它,它将为您提供长度,然后您可以提取最后一个字符

您可以使用
字符串长度
(或者小于一个)获取字符串的最后一个字符位置:


请注意,字符与长度为1的字符串不同。因此,提取字符的正确方法是使用
string ref
或类似方法,而不是使用
子字符串

您可以使用
字符串长度
获取字符串的最后一个字符位置(或者小于一个):


请注意,字符与长度为1的字符串不同。因此,提取字符的正确方法是使用
string ref
或类似方法,而不是使用
substring

您也可以使用
SRFI-13
函数
string take right
,它将参数字符串的最后一个
n
字符作为字符串返回。

您还可以使用
SRFI-13
函数
string take right
,它将参数字符串的最后一个
n
字符作为字符串返回。

克里斯似乎回答了您的问题。提醒一下,要使用返回字符的字符串ref,您应该使用比较函数char=?(或同等?)

我想添加另一个解决方案,我发现它更复杂,但需要从planet racket下载一个集合(安装软件包集合后)。使用collections包,您可以使用模块的(last..)和(first..)函数对任何集合使用相同的函数,而不仅仅是字符串

(require data/collection)

(let ([stringA "abcd"]
      [stringB "dcba"])
  (cond
    [(equal? (last stringA)
             (first stringB)) "True"]
    [else "False"]))

克里斯似乎回答了你的问题。提醒一下,要使用返回字符的字符串ref,您应该使用比较函数char=?(或同等?)

我想添加另一个解决方案,我发现它更复杂,但需要从planet racket下载一个集合(安装软件包集合后)。使用collections包,您可以使用模块的(last..)和(first..)函数对任何集合使用相同的函数,而不仅仅是字符串

(require data/collection)

(let ([stringA "abcd"]
      [stringB "dcba"])
  (cond
    [(equal? (last stringA)
             (first stringB)) "True"]
    [else "False"]))

你能解释一下sub1是从哪里来的吗?我试过这样做,但除了sub1,它似乎是正确的起点,我还不清楚sub1的目的。感谢
sub1
来自于使用基于零的索引。在单基索引中,索引从
1
n
,其中
n
是长度,但在零基索引中,索引从
0
n-1
,或
(sub1 n)
。你能解释一下sub1的来源吗?我试过这样做,但除了sub1,它似乎是正确的起点,我还不清楚sub1的目的。感谢
sub1
来自于使用基于零的索引。在单基索引中,索引从
1
n
,其中
n
是长度,但在零基索引中,索引从
0
n-1
,或
(sub1 n)
。您还可以使用
eqv?
来比较字符。但是为了更好的可读性,我更喜欢
char=?
,除非有充分的理由这样做。您也可以使用
eqv?
来比较字符。但是为了更好的可读性,我更喜欢
char=?
,除非有充分的理由这样做。