小编Ree*_*han的帖子

如何尽可能地向左移动元素?序言

假设我有一个包含 4 个元素 [0,4,0,2] 的列表(可以是任何排列)。列表中的每个元素都会向左移动。如果元素邻居为零,则它可以轻松向左移动。如果邻居是非零数,则它不能向左移动。(例如:[8,0,2,3] 会变成 [8,2,3,0],而 [0,4,0,2] 会变成 [4,2,0,0])

这是我目前的尝试:

shift_left([],_):-!.
shift_left([H1,H2|T],S):-
    H1=0,
    append(S,[H2|T],L1),
    write(L1),
    shift_left([H2|T],_).
shift_left([H1|T],_):-
    H1\=0,
    shift_left(T,[H1]).
Run Code Online (Sandbox Code Playgroud)

看了 CapelliC 的回答后,我的第二次尝试。它工作得很好。

shift_left([],[]).
shift_left([H|T],S):-
    shift_left(T,Q),
    H=0,
    append(Q,[0],S).
shift_left([H|T],S):-
    shift_left(T,Q),
    H\=0,
    S=[H|Q].
Run Code Online (Sandbox Code Playgroud)

prolog

4
推荐指数
2
解决办法
106
查看次数

Flutter:无法加载资源图像提供程序:AssetImage(bundle:null,名称:“assets/images/rose.jpg”)

我无法将图像作为背景上传到堆栈,我已将图像添加到资产文件夹中并将其添加到 pubspec.yaml 并向我显示该错误:

Exception caught by image resource service.
The following assertion was thrown resolving an image codec:
Unable to load asset: assets/images/rose.jpg
When the exception was thrown, this was the stack: 
#0      PlatformAssetBundle.load (package:flutter/src/services/asset_bundle.dart:225:7)
<asynchronous suspension>
#1      AssetBundleImageProvider._loadAsync (package:flutter/src/painting/image_provider.dart:668:31)
#2      AssetBundleImageProvider.load (package:flutter/src/painting/image_provider.dart:651:14)
#3      ImageProvider.resolveStreamForKey.<anonymous closure> (package:flutter/src/painting/image_provider.dart:504:13)
...
Image provider: AssetImage(bundle: null, name: "assets/images/rose.jpg")
Image key: AssetBundleImageKey(bundle: PlatformAssetBundle#dea48(), name: "assets/images/rose.jpg", scale: 1.0)
Run Code Online (Sandbox Code Playgroud)

代码:

  return new Scaffold(
  backgroundColor: Colors.greenAccent,

  body: new Stack(
    children: [
      new Image(
        image: new AssetImage("assets/images/rose.jpg"),
        fit: BoxFit.cover, …
Run Code Online (Sandbox Code Playgroud)

android flutter flutter-test flutter-layout flutter-animation

4
推荐指数
1
解决办法
2万
查看次数

如何以更简单的方式合并列表中的元素?序言

我正在尝试合并列表中的元素,规则如下:

1.合并一个列表,如果列表中的 2 个连续数字是相同的数字,它们应该通过求和合并成一个(即 [4,4,0,0] -> [8,0,0,0] )。

2.新合并的图块不能在同一回合与另一个图块合并(例如:[4,4,8,0] ->[8,8,0,0] 正确,但 [16,0,0,0] ] 错误的)

3.列表长度应该是4.如果列表在合并后减少,则在尾部添加一个零。(例如:[4,4,0,2] -> [8,0,2,0])。

4.零的情况下注意:[0,0,2,2] -> [0,4,0,0]。

我已经能够创建代码,但是我想找到一种更简单的方法来详细解释。

我的做法:

merge([H|T],L):-
   merge2([H|T],J),
    (
    length(J,2)->  
    append(J,[0,0],L);
    length(J,3)->  
    append(J,[0],L);length(J,4)-> J=L).

merge2(_,[]).
merge2([X],[X|_]).
merge2([H1,H2|T],[W|L]):-
    H1=H2,
    W is H1+H2,
    merge2(T,L).
merge2([H1,H2|T],[H1|L]):-
    H1\=H2,
    merge2([H2|T],L).
Run Code Online (Sandbox Code Playgroud)

merge list prolog

3
推荐指数
1
解决办法
88
查看次数