Отображение строки при использовании cond в Лиспе - PullRequest
1 голос
/ 22 сентября 2010

Я только начинаю с Лиспа и мне нужна помощь. Технически это домашнее задание, но я попробовал и получаю то, что хотел:

(defun speed (kmp)  
  (cond ((> kmp 100) "Fast")    
        ((< kmp  40) "Slow") 
        (t           "Average")))

Однако, если я запускаю программу, она отображает "Average" вместо Average (без кавычек).

Как мне заставить его отображать строку без кавычек?

Ответы [ 3 ]

3 голосов
/ 22 сентября 2010

Вы можете использовать символы вместо строк. Но имейте в виду, что символы будут преобразованы в верхний регистр:

> 'Average
AVERAGE 

Если вы заботитесь о кейсе или хотите вставить пробелы, используйте format:

 > (format t "Average")
 Average
2 голосов
/ 22 сентября 2010

Цикл read-eval-print отображает возвращаемое значение вашей функции, которая является одной из строк в ветви cond.Строки печатаются читабельно, заключая их в двойные кавычки.

Вы можете использовать (запись-строка (скорость 42)).Не беспокойтесь, он также показывает строку в двойных кавычках - это возвращаемое значение строки записи, отображаемой после вывода без кавычек.

1 голос
/ 22 сентября 2010

Вы также можете использовать символы вместо строк:

(defun speed (kmp)  
  (cond ((> kmp 100) 'fast)    
        ((< kmp  40) 'slow) 
        (t           'average)))

Символы по умолчанию заглавными буквами, поэтому внутренняя быстрая - БЫСТРАЯ.

Вы можете написать любой символ в любом случае и слюбые символы, использующие экранирование с вертикальными чертами:

|The speeed is very fast!|

Выше действительный символ в Common Lisp и он хранится внутри системы так же, как вы пишете его с сохранением регистра.

...