2015-04-02 3 views
-2

Может кто-нибудь, пожалуйста, объясните мне, как я ищу вхождения каждого слова в предложение, например, «кот сидел на коврике» в Common lisp?LISP: Найдите вхождения каждого слова в предложение.

Пользователь должен ввести эту строку текста перед рукой, а затем из этого следует учитывать вхождения. Любая помощь даже с того, с чего начать, поможет.

+0

Downvoted, потому что не было попытки решить проблему. –

+0

(DEFUN происходят() (Princ "Введите список:") (SETQ count1 (чтение строки)) (PRINC (COUNT # \ в count1))) – thekindlyman

+0

C'mon ребята помогают bruda из. – thekindlyman

ответ

1

Посмотрите split-by-one-space в The Common Lisp Cookbook

(defun split-by-one-space (string) 
    "Returns a list of substrings of string 
    divided by ONE space each. 
    Note: Two consecutive spaces will be seen as 
    if there were an empty string between them." 

    (loop for i = 0 then (1+ j) 
      as j = (position #\Space string :start i) 
      collect (subseq string i j) 
      while j)) 

Теперь вы могли бы просто использовать хэш-таблицу с equal в качестве теста и, возможно, использовать mapc в списке, чтобы получить ключ и частоты хэш. Тогда у вас есть то, что вы хотели в хеш-таблице.

В качестве альтернативы (и более медленным) было бы считать первый элемент с (count (car lst) lst :test #'equal) и обработать остаток списка (remove (car lst) lst :test #'equal). Когда отфильтрованный список пуст, все готово.

Смежные вопросы