我希望从列表中获取一个操作符,而不是符号。
例如,假设我想使用'(- a 3)
构建此列表:cons
。
如果我要放((car '(- a 3)) 5 3)
,则应打印2
。但是,由于-
位于列表中,因此获取列表的car
仍然是符号而不是实际运算符。
这里的问题是我必须使用cons
来构建(- a 3)
列表(并将其打印出来)。我的教授会在car
前面添加5 3
,最后应该2
打印(cons '- (cons 'a (cons '3 '())))
。
所以我目前有这个:(- a 3)
,打印出car
。
如果我添加5 3
和((car (cons '- (cons 'a (cons '3 '())))) 5 3)
:not a procedure
,则会收到错误消息import java.awt.EventQueue;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.text.DateFormat;
import java.text.SimpleDateFormat;
import java.util.Calendar;
import java.util.Date;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.border.EmptyBorder;
import com.toedter.calendar.JDateChooser;
import com.toedter.calendar.JMonthChooser;
public class test extends JFrame {
/**
*
*/
private static final long serialVersionUID = 2513170924764415427 L;
private JPanel contentPane;
private JDateChooser dateChooser;
/**
* Launch the application.
*/
public static void main(String[] args) {
EventQueue.invokeLater(new Runnable() {
public void run() {
try {
test frame = new test();
frame.setVisible(true);
} catch (Exception e) {
e.printStackTrace();
}
}
});
}
/**
* Create the frame.
*/
public test() {
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
setBounds(100, 100, 450, 300);
contentPane = new JPanel();
contentPane.setBorder(new EmptyBorder(5, 5, 5, 5));
setContentPane(contentPane);
contentPane.setLayout(null);
JMonthChooser monthChooser = new JMonthChooser();
monthChooser.setBounds(41, 45, 94, 20);
contentPane.add(monthChooser);
dateChooser = new JDateChooser();
dateChooser.setDateFormatString("yyyy-MM-dd");
dateChooser.setBounds(41, 108, 242, 30);
contentPane.add(dateChooser);
JButton btnClick = new JButton("CLICK");
btnClick.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent arg0) {
DateFormat df = new SimpleDateFormat("yyyy-MM-dd");
/*Date nextMonth = addDays(dateChooser.getDate(),7);
JOptionPane.showMessageDialog(null,df.format(nextMonth),null, getDefaultCloseOperation());*/
/*JOptionPane.showMessageDialog(null,df.format(setDateofMonth(6)),null, getDefaultCloseOperation());*/
Calendar cal = Calendar.getInstance();
int monthnow = cal.get(Calendar.MONTH);
int yearnow = cal.get(Calendar.YEAR);
int daynow = cal.get(Calendar.DAY_OF_MONTH);
int termspermonth = 4;
int monthlyschedule = 4;
int day1 = 1;
int day2 = 8;
int day3 = 15;
int day4 = 22;
for (int x = 0; x < 4; x++) {
for (int i = 0; i < 31; i++) {
if (i == day1) {
System.out.println(df.format(setDateofMonth(yearnow, monthnow + x + 1, day1)));
}
if (i == day2) {
System.out.println(df.format(setDateofMonth(yearnow, monthnow + x + 1, day2)));
}
if (i == day3) {
System.out.println(df.format(setDateofMonth(yearnow, monthnow + x + 1, day3)));
}
if (i == day4) {
System.out.println(df.format(setDateofMonth(yearnow, monthnow + x + 1, day4)));
}
}
}
}
});
btnClick.setBounds(110, 194, 91, 23);
contentPane.add(btnClick);
}
public static Date setDateofMonth(int year, int month, int day) {
Calendar cal = Calendar.getInstance();
cal.set(year, month - 1, day);
System.out.println(new SimpleDateFormat("MMMM").format(cal.getTime()));
Date date = cal.getTime();
return date;
}
。
有人可以提供一些指导吗?我不知道该怎么办。
答案 0 :(得分:2)
然后使用:(cons - (cons 'a (cons 3 '())))
。也就是说,不要引用-
。这将使用-
过程而不是符号。
> ((car (cons - (cons 'a (cons 3 '())))) 5 3)
2
这可以写成一个准引用列表,作为简写:†
> ((car `(,- a 3)) 5 3)
2
†在一个quasiquoted数据中 - 也就是说,使用反引号而不是引号 - 前面带逗号的任何内容都是不带引号的。 (内部没有逗号的quasiquote与引号相同。)