String LISP-从字符串中删除元音

String LISP-从字符串中删除元音,string,lisp,common-lisp,String,Lisp,Common Lisp,我想写一个函数,从字符串中删除所有元音。我想定义一个检测元音的函数,类似于symbolp、zerop等等,如果是元音,就删除它。我该怎么做?如果您对此有任何意见,我将不胜感激。谢谢 (defun deletevowels (string) (go through the list (if vowel-p deletevowels ) ) ) 然而,我有一个问题,那就是删除一个元音,如果它是最后一个元音,我如何修改它以满足我的要求,删除字符串中的所有元音?在下面的代码中,我提到了这个函数,

我想写一个函数,从字符串中删除所有元音。我想定义一个检测元音的函数,类似于symbolp、zerop等等,如果是元音,就删除它。我该怎么做?如果您对此有任何意见,我将不胜感激。谢谢

(defun deletevowels (string)
(go through the list
   (if vowel-p deletevowels )
)
)
然而,我有一个问题,那就是删除一个元音,如果它是最后一个元音,我如何修改它以满足我的要求,删除字符串中的所有元音?在下面的代码中,我提到了这个函数,元音-p one

(defun strip-vowel (word)
  "Strip off a trailing vowel from a string."
  (let* ((str (string word))
         (end (- (length str) 1)))
    (if (vowel-p (char str end))
        (subseq str 0 end)
        str)))

(defun vowel-p (char) (find char "aeiou" :test #'char-equal))
此外,如果我使用下面的函数将字符串转换为一个列表,然后在列表中而不是字符串中循环以查找元音并删除它,会更容易吗

(defun string-to-list (string)
  (loop for char across string collect char))
请参阅:Common Lisp Hyperspec


只需使用
REMOVE-IF
。那么您要说的是在字符串中循环并移除IF-vouelp?
(defun delete_元音(单词)(let(str(string-word))(end(-(length str)1))(REMOVE IF#'vouel-p str end))(defun vouel-p(char)(查找char“aeiou”:test#'char-equal))
我做错了什么?如果我将'remove if'放在一个由我定义名称的函数中,那会是什么样子?所以我只会叫(删除元音“壮观”),它会给我“spctclr”。
CL-USER 27 > (defun vowel-p (char)
               (find char "aeiou" :test #'char-equal))
VOWEL-P

CL-USER 28 > (remove-if #'vowel-p "abcdef")
"bcdf"
CL-USER 29 > (defun deletevowels (string)
               (remove-if #'vowel-p string))
DELETEVOWELS

CL-USER 30 > (deletevowels "spectacular")
"spctclr"