2013-04-02 65 views
1

我想写一个从字符串中删除所有元音的函数。我想过定义一个检测元音的函数,类似于symbolp,zerop等等,如果它是元音,就删除它。我怎样才能做到这一点?我将不胜感激这方面的任何投入。由于LISP-从字符串中删除元音

(defun deletevowels (string) 
(go through the list 
    (if vowel-p deletevowels) 
) 
) 

不过,我有一个删除一个元音,如果它是最后一个问题,我怎么能修改此满足了我想做的事,删除字符串中的所有元音?在下面的代码中,我提到了这个函数,元音-p。

(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)) 
+3

只使用'REMOVE-IF'。 –

+0

所以你说的是循环的字符串和删除 - 如果vowelp? –

+0

'(defun定义delete_vowels(字) (让(STR(串字)) (端( - (长度STR)1)) ) (删除-如果#'元音 - 对STR端) ) ( defun vowel -p(char)(找到char“aeiou”:test#'char-equal))' 我在做什么错? –

回答

2
CL-USER 27 > (defun vowel-p (char) (find char "aeiou" :test #'char-equal)) 
VOWEL-P 

CL-USER 28 > (remove-if #'vowel-p "abcdef") 
"bcdf" 

见:Common Lisp的Hyperspec,REMOVE-IF

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

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

如果我将'remove-if'放在一个函数中,该函数会有一个由我定义的名字,那么这将是怎样的呢?所以我只会打电话(deletevowels“壮观”),它会给我“spctclr”。 –

+0

@Max无赖:参见上文 –