我真的不喜欢LISP,我很乐意将所有旧的lisp代码转换为c。我是一个初学者C编码员,甚至更多是lisp的初学者。
答案 0 :(得分:4)
这两种语言非常不同。 Lisp依赖于大量机器的存在:
答案 1 :(得分:1)
这是我转换成C的一些LISP.LISP来自'Calendrical Calculations',转换在很久以前完成,来自本书的“千禧版”(现在有第三版)换句话说,所以C中的所有名字都以“CCME”或“ccme”为前缀。
/*
Gregorian year corresponding to the fixed $date$.
Original LISP code
(defun alt-gregorian-year-from-fixed (date)
;; TYPE fixed-date -> gregorian-year
(let* ((approx ; approximate year
(quotient (- date gregorian-epoch -2)
146097/400))
(start ; start of next year
(+ gregorian-epoch
(* 365 approx)
(quotient approx 4)
(- (quotient approx 100))
(quotient approx 400))))
(if (< date start)
approx
(1+ approx))))
*/
CCME_GregorianYear ccme_alt_gregorian_year_from_fixed(CCME_FixedDate date)
{
CCME_GregorianYear rv;
/*S-CODE*/
CCME_GregorianYear approx = ccme_quotient(date - ccme_gregorian_epoch() + 2, 146097.0/400.0);
CCME_GregorianYear start = ccme_gregorian_epoch() + (365 * approx) +
ccme_quotient(approx, 4) -
ccme_quotient(approx, 100) +
ccme_quotient(approx, 400);
if (date < start)
rv = approx;
else
rv = approx + 1;
/*E-CODE*/
return rv;
}
然而,这不是典型的LISP(也不是特别典型的C),并且LISP到C的一般转换是微不足道的。当你处理字符串和列表(特别是字符串列表)时,这将是双重的,因为C中的内存管理变得......有趣(辛勤工作,有问题)。