LINUX.ORG.RU

Преобразование типов в lisp


0

1

Здравствуйте. Не могу найти как преобразовать строку в число. Вот число в строку нашел write-to-string а наоборот всё никак не найду. type-of пишет что формат (SIMPLE-ARRAY CHARACTER (1)) а мне нужен real. Вообще суть в том что в хеш таблице полно данных как чисел так и строк, мне нужно обработать числа и строки отдельно. Что бы определить число или строка передо мной хочу просто использовать вот такую штуку

(if (not (typep (gethash key hash-table)'number))...)

Ответ на: комментарий от archimag

спасибо. Правда какая то немножко кривоватая библиотека, или я чего то не понимаю. Но вместо того что бы написать просто^

(Parse-number .....)

Приходиться писать:

(org.mapcar.parse-number:parse-number...)

А так всё супер ещё раз спасибо, проблема решена.

RusNekromant
() автор топика
Ответ на: комментарий от RusNekromant

> (org.mapcar.parse-number:parse-number...)

Бог с тобой, просто (parse-number:parse-nubmer ..). А что бы писать совсем просто (parse-number ..), то надо же импортировать символ в пакет.

archimag ★★★
()
Ответ на: комментарий от RusNekromant

> Он туда автоматом не импортируется?

Нет, естественно. Туда вообще никогда ничто автоматом не импортируется. Но можешь сделать (use-package :parse-number), хотя это и криво.

archimag ★★★
()
Ответ на: комментарий от quasimoto

Мне наоборот нада))))) но спасибо. И задача уже решена.

RusNekromant
() автор топика
Ответ на: комментарий от archimag

Блин тестил только на числах и теперь проблема... Если передать строку без числа, не важно на кирилице или латинице parse-number захлёбывается. вот код ошибки:

junk in string "Raion"
   [Condition of type SB-INT:SIMPLE-PARSE-ERROR]

Restarts:
 0: [RETRY] Retry SLIME REPL evaluation request.
 1: [ABORT] Return to SLIME's top level.
 2: [CLOSE-CONNECTION] Close SLIME connection.
 3: [ABORT] Exit debugger, returning to top level.

Backtrace:
  0: (PARSE-INTEGER "Raion")[:EXTERNAL]
  1: (ORG.MAPCAR.PARSE-NUMBER:PARSE-POSITIVE-REAL-NUMBER "Raion")[:EXTERNAL]
  2: (НАЧАЛО)
RusNekromant
() автор топика
Ответ на: комментарий от RusNekromant

Блин, а ты чего ожидало? это же parse-number, а биндингов к libastral для CL ещё не сделали.

Оберни вызов в ignore-erros - будет число, будешь получать число, а иначе NIL.

archimag ★★★
()
Ответ на: комментарий от archimag

всё просто пользуюсь вот такой схемой

(parse-integer " 42 is forty-two" :junk-allowed t)

RusNekromant
() автор топика
Ответ на: комментарий от RusNekromant

> Я уже много чего перечитал.

Перечитай еще несколько раз, пока не дойдет.

anonymous
()
Ответ на: комментарий от RusNekromant

Ваш способ лучше и проще да и статейка интересная в плане матчасти....

Он не мой, это как бы стандарт. А статейки те - перевод CL cookbook (не полный).

quasimoto ★★★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.