有人可以提出更好和/或更优雅的实现:
let each xs =
let rec each' acc left right =
match right with
| [] -> acc
| right -> let new_left = left @ [List.hd right]
let next = List.tl right
let result = (List.hd right), left @ next
each' (result::acc) new_left next
each' [] [] xs
它做到了:
> each [1..3];; val it : (int * int list) list = [(3, [1; 2]); (2, [1; 3]); (1, [2; 3])]
此函数也可以反向返回结果.我们的想法是将所有元素作为元组,包含元素和rest元素列表.
所以我最近实现了一个代码来检查一个单词,看它是不是回文.
def isPalindrome():
string = input('Enter a string: ')
string1 = string[::-1]
if string[0] == string[(len(string)-1)] and string[1:(len(string)-2)] == string1[1:(len(string)-2)]:
print('It is a palindrome')
else:
print('It is not a palindrome')
isPalindrome()
Run Code Online (Sandbox Code Playgroud)
我想知道是否有人可以给我提示简化代码.
编辑 - 如果我要使用语句使函数成为迭代函数string == string1,我将如何停止无限循环?我需要一个计数来停止while循环吗?
我有三个按钮和三个JS功能,可以切换三个不同div的显示.如何将我的三个JS函数简化/压缩成一个将每个按钮连接到相应内容的函数?
例:
HTML按钮
<button onclick="myFunction1()">Button 1</button>
<button onclick="myFunction2()">Button 2</button>
<button onclick="myFunction3()">Button 3</button>
Run Code Online (Sandbox Code Playgroud)
HTML内容
<div id="ContentOne">This is Content One.</div>
<div id="ContentTwo">This is Content Two.</div>
<div id="ContentThree">This is Content Three.</div>
Run Code Online (Sandbox Code Playgroud)
JavaScript的
function myFunction1() {
var x = document.getElementById("ContentOne");
if (x.style.display === "none") {
x.style.display = "block";
} else {
x.style.display = "none";
}
}
function myFunction2() {
var x = document.getElementById("ContentTwo");
if (x.style.display === "none") {
x.style.display = "block";
} else {
x.style.display = "none";
}
}
function myFunction3() {
var x …Run Code Online (Sandbox Code Playgroud) 假设一个较大的模板库包含大约100个文件,其中包含大约100个模板,总共超过200,000行代码.一些模板使用多重继承来使库本身的使用相当简单(即从一些基本模板继承并且只需要实现某些业务规则).
所有存在的(长达数年),"工作"并用于项目.
但是,使用该库编译项目会占用越来越多的时间,并且需要花费相当长的时间来查找某些错误的源代码.修复通常会导致意外的副作用或非常困难,因为某些相互依赖的模板需要更改.由于功能的庞大,测试几乎是不可能的.
现在,我真的想简化架构以使用更少的模板和更专业的小类.
是否有任何可靠的方法来完成这项任务?什么是一个好的开始?
我有这个代码,但它有点重复,有没有办法让它更短?
jQuery(document).ready(function() {
var allTabs = jQuery('#front, #blog, #portfolio, #pages, #colors, #fonts');
allTabs.hide();
jQuery('#front-show').click(function() {
event.preventDefault();
allTabs.hide();
jQuery('#front').show();
});
jQuery('#blog-show').click(function() {
event.preventDefault();
allTabs.hide();
jQuery('#blog').show();
});
jQuery('#portfolio-show').click(function() {
event.preventDefault();
allTabs.hide();
jQuery('#portfolio').show();
});
jQuery('#pages-show').click(function() {
event.preventDefault();
allTabs.hide();
jQuery('#pages').show();
});
jQuery('#colors-show').click(function() {
event.preventDefault();
allTabs.hide();
jQuery('#colors').show();
});
jQuery('#fonts-show').click(function() {
event.preventDefault();
allTabs.hide();
jQuery('#fonts').show();
});
});
Run Code Online (Sandbox Code Playgroud) 新的perl,尝试使用它的语法,然后我收到此错误消息
$ perl testP
syntax error at testP line 3, near "$_ ("
Execution of testP aborted due to compilation errors.
Run Code Online (Sandbox Code Playgroud)
对于:
$_=$_+1 foreach $_ (@_);
Run Code Online (Sandbox Code Playgroud)
谁能告诉我出了什么问题以及如何解决?谢谢.
我正在研究一个项目,我正在使用Intellij IDEA.在我写作的时候,我收到了一条通知,说明我的if语句可以简化了.(注意我还是新编码)
它说:
报告if语句可以简化为单个赋值还是返回语句.例如:
if (foo()) {
return true;
} else {
return false;
}
Run Code Online (Sandbox Code Playgroud)
可以简化为
return foo();
Run Code Online (Sandbox Code Playgroud)
这是如何运作的?假设foo()是数字4,这不会只返回4而不是真的吗?我有什么误会?
编辑
这是我写的代码:
if (row > 0 && row < 4 && col > 0 && col < 4) {
return false;
} else {
return true;
}
Run Code Online (Sandbox Code Playgroud)
它可以简化为:
return !(row > 0 && row < 4 && col > 0 && col < 4);
Run Code Online (Sandbox Code Playgroud)
我只是不明白这是如何简化的.
我有一组处理蛋白质序列的15个数据框,我的目标是分析蛋白质随时间的变化.但是,我的数据框架有大约5000个基因.所以我正在寻找一种简化数据的方法,以便于分析.
下面是一个示例数据框.
> sample
p1 p2 p3 year
1 a d d 1970
2 a c e 1970
3 b d e 1970
4 b c d 1985
5 b c d 1985
6 b c d 1999
Run Code Online (Sandbox Code Playgroud)
我想要做的是每年分析每个位置(p1 p2和p3)并返回该年度该位置最常见的条目,从而创建一个每年只有一个序列的新数据框.结果数据框应如下所示:
> result
p1 p2 p3 year
1 a d e 1970
2 b c d 1985
3 b c d 1999
Run Code Online (Sandbox Code Playgroud)
数据框已按日期排序,但我不知道每年有多少条目.那么,有没有办法用这种方法简化我的数据?
为蹩脚的问题道歉.我正在使用Intellij Clion Student许可版本用于我的C++课程.作为实现UnsortedList类的一部分,我们必须编写一个方法isInTheList来查看数组中是否存在元素.类实现如下
bool UnsortedList::isInTheList(float item) {
for (int i = 0; i < length; i++) {
if (data[i] == item) {
return true;
}
return false;
}
}
Run Code Online (Sandbox Code Playgroud)
然而,ide data[i] == item用弹出的说法显示了一个彩色标记
Statement can be simplified less... (Ctrl+F1)
This inspection finds the part of the code that can be simplified, e.g. constant conditions, identical if branches, pointless boolean expressions, etc.
Run Code Online (Sandbox Code Playgroud)
对于先前检查列表是否为空的方法,我使用以下简化形式而不是if-else语句.
bool UnsortedList::isEmpty() {
return (length == 0);
}
Run Code Online (Sandbox Code Playgroud)
但是,现在涉及迭代,我无法在前者中提出简化的陈述.任何帮助深表感谢.谢谢.
我想在Windows上的Delphi XE6中简化以下代码,因为我添加了越来越多类型的组件,所以该代码变得难以维护。
可移植性说明:我想稍后在Linux上的Lazarus 2.0.2中使用相同的代码,几乎没有更改,因此Windows消息处理已成为不可能。
问题是,我似乎找不到一种将OnMouseEnter事件处理程序分配给整个Form上所有组件的方法。
我尽了一切努力,包括对象树中常见的各种类。OnMouseEnter事件似乎没有什么共同点。
事件处理程序本身仅包含一个命令(procedure = void function),并且将不再包含该命令,也许这可以简化整个问题?
正如您在下面看到的那样,此刻我需要将每种类型的组件(当前仅TLabel,TButton和TEdit)添加到for循环中。
procedure TFormMain.FormCreate(Sender: TObject);
var
I: Integer;
begin
for I := 0 to FormMain.ComponentCount - 1 do
begin
if FormMain.Components[I] is TLabel then
begin
(FormMain.Components[I] as TLabel).OnMouseEnter
:= @CustomGenericMouseEnter;
end;
if FormMain.Components[I] is TButton then
begin
(FormMain.Components[I] as TButton).OnMouseEnter
:= @CustomGenericMouseEnter;
end;
if FormMain.Components[I] is TEdit then
begin
(FormMain.Components[I] as TEdit).OnMouseEnter
:= @CustomGenericMouseEnter;
end;
end;
end;
procedure TFormMain.CustomGenericMouseEnter(Sender: TObject);
begin
SingleCustomProcedure; // …Run Code Online (Sandbox Code Playgroud)