> 1 <

Автор Сообщение

Nick

Members


Статус

2 сообщений

Где: Russia Cheboksary
Род занятий: Студент
Возраст:

#584   2009-08-01 21:49 GMT+3 часа(ов)      
Привет. Не могу разобраться в проблеме.
В Emacs Lisp имеется такая функция

 
(defun myfunction(stype sline)
(if (string= stype "const1")
(format "line_1 %s" sline))
(if (string= stype "const2)
(format "
line_2 %s" sline))
...
)


Как правильно возвратить одно из значений? Возвращается значение последнего вычисленного списка, а он nil может быть, так как (string= stype "constN") могут не совпасть)
пробовал добавлять к каждому условию
(setq tmp (format "..." sline))
и в конце функции делать так
(eval tmp)
потом разыскал в мануале
(return-from block (var))
с ней тоже не получается)
(также пытался сделать с помощью (case .. ) глобальных переменных и т.п.) ) знаю что проблема на пустом месте, решаема, но не могу додуматься ))

отредактировал(а) Nick: 2009-08-01 23:05 GMT+3 часа(ов)

VH

Members


Статус

289 сообщений

Где: ---
Род занятий:
Возраст:

#587   2009-08-02 12:16 GMT+3 часа(ов)      
(defun myfunction (stype sline)
(format
(cond
((string= stype "const1") "line_1 %s")
((string= stype "const2") "line_2 %s")
...
)
sline
)
)

Nick

Members


Статус

2 сообщений

Где: Russia Cheboksary
Род занятий: Студент
Возраст:

#588   2009-08-02 23:56 GMT+3 часа(ов)      
VH, Спасибо за помощь! Код отлично работает.
в лиспе нужно чуть-чуть по-другому думать

VH

Members


Статус

289 сообщений

Где: ---
Род занятий:
Возраст:

#589   2009-08-03 12:53 GMT+3 часа(ов)      
(defun myfunction (stype sline)
(format
(concatenate 'STRING
(cond
((string= stype "const1") "line_1")
((string= stype "const2") "line_2")
...)
" %s")
sline))

(defun myfunction (stype sline &optional (abc '(("const1" "line_1")("const2" "line_2")...)))
(format
(concatenate 'STRING
(cdr (assoc stype abc))
" %s")
sline))
> 1 <


Онлайн :

0 пользователь(ей), 12 гость(ей) :




Реклама на сайте: