+ for (; scm_is_pair (l); l = scm_cdr (l))
+ if (scm_is_number (scm_car (l)))
+ s.add_point (scm_to_int (scm_car (l)));
+ return s;
+}
+
+Real
+robust_scm2double (SCM k, double x)
+{
+ if (scm_is_number (k))
+ x = scm_to_double (k);
+ return x;
+}
+
+
+string
+robust_scm2string (SCM k, string s)
+{
+ if (scm_is_string (k))
+ s = ly_scm2string (k);
+ return s;
+}
+
+int
+robust_scm2int (SCM k, int o)
+{
+ if (scm_integer_p (k) == SCM_BOOL_T)
+ o = scm_to_int (k);
+ return o;
+}
+
+
+SCM
+ly_rational2scm (Rational r)
+{
+ return scm_divide (scm_from_int (r.numerator ()), scm_from_int (r.denominator ()));
+}
+
+
+Rational
+ly_scm2rational (SCM r)
+{
+ return Rational (scm_to_int (scm_numerator (r)),
+ scm_to_int (scm_denominator (r)));
+}
+
+Rational
+robust_scm2rational (SCM n, Rational rat)
+{
+ if (ly_is_fraction (n))
+ return ly_scm2rational (n);
+ else
+ return rat;
+}
+
+SCM
+alist_to_hashq (SCM alist)
+{
+ int i = scm_ilength (alist);
+ if (i < 0)
+ return scm_c_make_hash_table (0);
+
+ SCM tab = scm_c_make_hash_table (i);
+ for (SCM s = alist; scm_is_pair (s); s = scm_cdr (s))